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

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

Компании: Яндекс

Стек: JavaScript

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

Для реализации декоратора, ограничивающего число вызовов функции и вызывающего колбэк при последнем вызове, можно использовать замыкание. Вот пример:

JAVASCRIPT
function limitCalls(fn, maxCalls, callback) {
let callCount = 0;
return function(...args) {
callCount++;
if (callCount <= maxCalls) {
fn.apply(this, args);
if (callCount === maxCalls) {
callback();
}
}
};
}
// Пример использования
function sayHello(name) {
console.log(`Привет, ${name}!`);
}
const limitedHello = limitCalls(sayHello, 3, () => {
console.log('Лимит вызовов исчерпан');
});
limitedHello('Анна'); // Привет, Анна!
limitedHello('Иван'); // Привет, Иван!
limitedHello('Мария'); // Привет, Мария! + Лимит вызовов исчерпан
limitedHello('Петр'); // Ничего не произойдет

Этот декоратор:

  • Принимает исходную функцию fn, максимальное количество вызовов maxCalls и колбэк callback.
  • Возвращает новую функцию, которая отслеживает количество вызовов через замыкание.
  • Вызывает fn только до достижения лимита, после чего вызывает callback при последнем разрешенном вызове.
  • Сохраняет контекст this и передает аргументы с помощью apply.

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

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