> Как реализовать декоратор функции в JavaScript, ограничивающий число вызовов и вызывающий колбэк при последнем вызове (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Для реализации декоратора, ограничивающего число вызовов функции и вызывающего колбэк при последнем вызове, можно использовать замыкание. Вот пример:
JAVASCRIPTfunction 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.
> Похожие задачи по frontend
Как реализовать тайм-аут для асинхронного запроса, если ответ приходит дольше одной секунды в JavaScript?
Уровень: seniorКатегория: Технические вопросы
Компания: Яндекс
Стек: JavaScript
Что содержит this в обработчике события на кнопку в JavaScript
Уровень: seniorКатегория: Технические вопросы
Компания: Exness
Стек: JavaScript
Как обрабатывать массив результатов промисов в JavaScript и выводить success или fail в консоль
Уровень: seniorКатегория: Технические вопросы
Компания: Яндекс
Стек: JavaScript
Как обработать ошибку, если хотя бы один из нескольких запросов не ответил в JavaScript?
Уровень: seniorКатегория: Технические вопросы
Компания: Яндекс
Стек: JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью