Sobes.tech
Back to tasks
Junior — Senior
23

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

Companies where asked:

X5 techX5 tech
Get help with live coding in real time with Sobes Copilot
Task condition

Необходимо реализовать функцию 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'