Проверяет понимание механизма отмены таймера в реализации debounce для управления частотой вызова функций.
Debounce — это техника, которая ограничивает частоту выполнения функции, откладывая её вызов до тех пор, пока не пройдет определённый промежуток времени после последнего события. Ключевым элементом реализации является использование setTimeout для создания задержки и clearTimeout для отмены предыдущего запланированного вызова.
При каждом вызове debounced-функции:
clearTimeout(timerId), который отменяет ранее установленный таймер.setTimeout с нужной задержкой.Таким образом, если события происходят часто (например, при вводе текста), таймер постоянно сбрасывается, и целевая функция выполняется только один раз после того, как поток событий прекратится.
function debounce(func, delay) {
let timerId;
return function(...args) {
clearTimeout(timerId); // отменяем предыдущий таймер
timerId = setTimeout(() => {
func.apply(this, args);
}, delay);
};
}
// Использование
const saveInput = debounce((value) => {
console.log('Сохранение:', value);
}, 300);
saveInput('a'); // таймер сброшен
saveInput('ab'); // таймер сброшен
saveInput('abc'); // через 300 мс выполнится только этот вызовБез clearTimeout каждый вызов создавал бы новый независимый таймер, и функция выполнялась бы столько раз, сколько было вызовов, с задержкой. Это привело бы к неконтролируемому росту числа выполнений и потере смысла debounce.
Использование clearTimeout в debounce обязательно для корректной работы: оно позволяет отменять устаревшие запланированные вызовы и гарантирует, что функция выполнится только после паузы в событиях. Эта техника широко применяется при обработке ввода пользователя, ресайзе окна и других частых событиях.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию