Код Middle Реализация с нуля обновлено
debounce + cancel + flush
Условие
Доработай debounce: добавь методы cancel() (отменить отложенный вызов) и flush() (вызвать немедленно, если есть отложенный).
Что проверяют тесты
схлопывает вызовы
cancel отменяет
flush вызывает сразу
flush без отложенного - ничего
this сохранён
Как подойти
Замыкание хранит timer, lastArgs, lastThis. wrapper - обычная function (нужен this), cancel/flush вешаются на неё как свойства. Инвариант: timer !== null означает «есть отложенный вызов»; сбрасывай его и в колбэке, и в cancel.
Подсказки: 3
- Методы вешаются на саму возвращаемую функцию - она объект.
- Чтобы flush мог вызвать fn, нужно хранить последние args и this.
- После срабатывания и после cancel обнуляй timer, иначе flush выстрелит повторно.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.