> Как отследить момент запуска и завершения обычной функции в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Домклик

Стек: JavaScript

> Пример ответа

Для отслеживания момента запуска и завершения обычной функции в JavaScript можно использовать несколько подходов. Самый простой - добавить логирование непосредственно в тело функции:

JAVASCRIPT
function myFunction() {
console.log('Функция запущена:', new Date().toISOString());
// ... тело функции
console.log('Функция завершена:', new Date().toISOString());
}

Более гибкий способ - обернуть функцию в декоратор (higher-order function), который автоматически добавляет логирование:

JAVASCRIPT
function trackExecution(fn) {
return function(...args) {
console.log(`Запуск ${fn.name} в ${new Date().toISOString()}`);
const result = fn.apply(this, args);
console.log(`Завершение ${fn.name} в ${new Date().toISOString()}`);
return result;
};
}
// Использование
function calculateSum(a, b) {
return a + b;
}
const trackedSum = trackExecution(calculateSum);
trackedSum(2, 3); // Выведет время запуска и завершения

Для асинхронных функций (async/await) нужно учитывать Promise:

JAVASCRIPT
function trackAsyncExecution(fn) {
return async function(...args) {
console.log(`Запуск ${fn.name} в ${new Date().toISOString()}`);
try {
const result = await fn.apply(this, args);
console.log(`Завершение ${fn.name} в ${new Date().toISOString()}`);
return result;
} catch (error) {
console.log(`Ошибка в ${fn.name} в ${new Date().toISOString()}`);
throw error;
}
};
}

Также можно использовать Proxy для автоматического отслеживания всех методов объекта, но для отдельной функции декоратор - наиболее лаконичное и читаемое решение.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью