Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Способы подсчёта тела функции в JavaScript
В контексте собеседования "подсчёт тела функции" может означать несколько вещей.
1. Получение текста функции через toString()
Каждая функция в JavaScript имеет встроенный метод toString(), который возвращает строку с полным кодом функции:
function greet(name) {
console.log(`Hello, ${name}!`);
return true;
}
const bodyText = greet.toString();
console.log(bodyText);
// Выведет:
// function greet(name) {
// console.log(`Hello, ${name}!`);
// return true;
// }
Для стрелочных функций это работает точно так же:
const arrow = (x) => {
const result = x * 2;
return result;
};
console.log(arrow.toString());
2. Подсчёт количества строк в теле функции
Если нужно узнать, сколько строк кода в функции:
function countFunctionLines(fn) {
const bodyText = fn.toString();
const lines = bodyText.split('\n').length;
return lines;
}
function example() {
const a = 1;
const b = 2;
return a + b;
}
console.log(countFunctionLines(example));
3. Извлечение только тела без сигнатуры
Если нужно получить только содержимое функции без объявления:
function extractBody(fn) {
const text = fn.toString();
const startIndex = text.indexOf('{') + 1;
const endIndex = text.lastIndexOf('}');
return text.substring(startIndex, endIndex).trim();
}
function test() {
console.log('Hi');
return 42;
}
console.log(extractBody(test));
4. Анализ сложности функции
В интервью часто спрашивают о времени выполнения функции. Это означает анализ её алгоритмической сложности (Big O notation):
// O(1) - постоянное время
function isEven(n) {
return n % 2 === 0;
}
// O(n) - линейное время
function sumArray(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
// O(n^2) - квадратичное время
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
5. Практический пример: анализатор функции
function analyzeFunction(fn) {
const text = fn.toString();
return {
fullText: text,
lineCount: text.split('\n').length,
characterCount: text.length,
hasAsync: text.includes('async'),
hasReturn: text.includes('return'),
hasLoop: text.includes('for') || text.includes('while')
};
}
Ограничения и особенности
- Native функции: Для встроенных функций (например, Array.map) toString() возвращает [native code]
- Минифицированный код: Если функция была минифицирована, toString() вернёт минифицированный вариант
- Функции с eval: Трудно анализировать функции, созданные через eval() или конструктор Function
- Производительность: Использование toString() имеет некоторый оверхед
При интервью важно понимать, о каком именно подсчёте идёт речь, и выбрать наиболее релевантный подход к решению.