PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Что такое setTimeout?

Асинхронность и Event Loop

`setTimeout` — функция, которая планирует однократное выполнение коллбэка через заданную задержку в миллисекундах. Это макрозадача.

Синтаксис

const id = setTimeout(callback, delay, arg1, arg2);
clearTimeout(id); // отменить
const timerId = setTimeout(() => {
  console.log('через 1 секунду');
}, 1000);

Нюансы

Задержка — это минимум, а не точное время

Коллбэк попадёт в очередь макрозадач и выполнится не раньше delay, но только когда стек освободится и очередь микрозадач опустеет.

setTimeout(() => console.log('timeout'), 0);
Promise.resolve().then(() => console.log('promise'));
// promise, потом timeout — микрозадачи раньше

Минимальная задержка

При вложенных таймерах (глубже 5 уровней) браузер поднимает минимум до ~4 мс.

this внутри коллбэка

Обычная функция потеряет контекст — используют стрелку или bind.

setTimeout против setInterval

  • setTimeout — один раз.
  • setInterval — повторяется; но для точности часто делают «рекурсивный setTimeout».

Коротко для собеседования

setTimeout планирует одноразовый коллбэк как макрозадачу через минимум delay мс (не точно). Выполнится после освобождения стека и всех микрозадач. Отменяется clearTimeout.

Другие вопросы раздела