Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: debounce, clearTimeout, setTimeout, event loop

Для чего используется clearTimeout в debounce?

Проверяет понимание механизма отмены таймера в реализации debounce для управления частотой вызова функций.

Короткий ответ

clearTimeout в debounce используется для отмены предыдущего таймера при каждом новом вызове функции. Это гарантирует, что целевая функция выполнится только после того, как пройдет указанная задержка с момента последнего вызова. Без clearTimeout каждый вызов создавал бы новый таймер, и функция выполнялась бы многократно, что противоречит логике debounce.

Длинный ответ

Назначение clearTimeout в 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

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#debounce

#clearTimeout

#setTimeout

#event loop

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию