Назад к задачам
X5 techПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
4
Отложенный вызов функции с контролем частоты
Компании, где спрашивали:
Условие задачи
Необходимо реализовать функцию 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'