Выбор ответа Junior Реализация с нуля обновлено
debounce без clearTimeout
Вопрос
Обработчик ввода обёрнут в эту функцию. Пользователь быстро набрал 5 символов. Сколько раз вызовется fn?
function debounce(fn, ms) {
return function (...args) {
setTimeout(() => fn.apply(this, args), ms);
};
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 5 раз, каждый с задержкой ms после своего символа. Без сохранения и сброса таймера это не debounce, а просто отложенный вызов: каждый ввод ставит свой таймер, и все пять сработают.
Варианты ответа
- 1 раз, через
msпосле последнего символа - 5 раз, каждый с задержкой
msпосле своего символаправильный ответ - 0 раз: каждый новый вызов отменяет предыдущий
- 1 раз, через
msпосле первого символа
Разбор
Без сохранения и сброса таймера это не debounce, а просто отложенный вызов: каждый ввод ставит свой таймер, и все пять сработают. Суть debounce в том, что новый вызов отменяет предыдущий таймер (clearTimeout(timer)), поэтому для корректной реализации нужна переменная timer в замыкании. Вызов через ms после первого символа это поведение throttle с leading-режимом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.