Назад к задачам
Junior — Senior
4

Отложенный вызов функции с контролем частоты

Компании, где спрашивали:

X5 techX5 tech
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо реализовать функцию debounce, которая ограничивает частоту вызова переданной функции. При каждом новом запросе таймер сбрасывается, и оригинальная функция будет выполнена только после того, как с момента последнего вызова пройдёт заданный интервал времени. Обёртка должна корректно сохранять контекст (this) и передавать все аргументы оригинальной функции.

function debounce(func, wait) {
    let timeoutId = null;
    return function(...args) {
        const context = this;
        clearTimeout(timeoutId);
        timeoutId = setTimeout(() => func.apply(context, args), wait);
    };
}

Пример использования:

const log = debounce(console.log, 300);
log('first'); // будет отложен
log('second'); // предыдущий таймер сброшен, будет отложен
// После 300 мс после последнего вызова в консоль попадёт 'second'