Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: settimeout

Гарантирует ли setTimeout выполнение callback ровно через заданное время?

Вопрос проверяет понимание того, что таймеры в браузере работают как “минимальная задержка”, а не точный планировщик.

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

setTimeout не гарантирует выполнение callback ровно через указанное время. Он гарантирует, что callback не выполнится раньше, чем пройдёт заданная задержка. После истечения задержки callback попадает в очередь задач и будет выполнен, когда освободится call stack. На фактическое время влияет нагрузка, блокировки и приоритеты очередей. Поэтому таймер часто срабатывает позже.

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

setTimeout(fn, ms) — это таймер с минимальной задержкой, а не “точный будильник”.

Что реально делает setTimeout

  1. Браузер запускает таймер на ms

  2. Когда время прошло, callback не запускается сразу

  3. Callback ставится в очередь macrotask

  4. Он выполнится только тогда, когда:

    • call stack пуст

    • очередь microtask очищена

    • Event Loop доберётся до этой задачи

Почему “ровно через ms” невозможно гарантировать

Причины задержек:

  • в call stack выполняется длинный синхронный код

  • много microtask (например, цепочки Promise.then)

  • браузер занят рендером/обработкой событий

  • вкладка в фоне (браузеры могут троттлить таймеры)

Минимальный пример блокировки

setTimeout(() => console.log('timeout'), 0)

const start = Date.now()
while (Date.now() - start < 1000) {
  // блокируем поток на 1 секунду
}

Даже при 0 callback выполнится после того, как завершится цикл while.

Практика

  • setTimeout(..., 0) — это не “сразу”, а “как получится, когда очередь дойдёт”

  • для точных интервалов (например, анимаций) обычно используют requestAnimationFrame

  • для “периодических задач” с контролем drift — часто пишут собственный планировщик

Вывод:
setTimeout гарантирует только минимальную задержку, а фактическое выполнение зависит от очередей и занятости основного потока.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

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

#settimeout

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