7. Реализация debounce
ЛегкоРеализуйте функцию debounce, которая откладывает вызов переданной функции до тех пор, пока не пройдёт заданное время после последнего вызова.
Каждый способ должен быть реализован независимо в своём контейнере:
- Функция должна откладывать вызов на delay миллисекунд
- При повторном вызове таймер должен сбрасываться
- Аргументы должны передаваться в оригинальную функцию
- Контекст this должен сохраняться
Реализуйте функцию debounce(fn, delay), которая: - Возвращает новую функцию - При вызове возвращённой функции откладывает выполнение fn на delay мс - Если функция вызвана снова до истечения delay, таймер сбрасывается - Передаёт аргументы и контекст this в оригинальную функцию Пример использования: const debouncedSearch = debounce((query) => fetch('/search?q=' + query), 300); input.addEventListener('input', (e) => debouncedSearch(e.target.value));
Примеры
debounce(fn, 100): вызов, пауза 50мс, вызов, пауза 100мс
fn вызвана 1 раз (после последнего вызова + 100мс)
Каждый новый вызов сбрасывает таймер, поэтому fn вызывается только один раз
Ограничения
- Не использовать сторонние библиотеки