Что такое 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.