> Почему setTimeout выполняется после микрозадач в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Cyber Interactive, IT-One

Стек: JavaScript

> Пример ответа

В JavaScript существует цикл событий (Event Loop), который управляет порядком выполнения кода. setTimeout относится к макрозадачам (macrotasks), а промисы и queueMicrotask - к микрозадачам (microtasks). На каждом тике цикла событий сначала выполняется одна макрозадача (например, текущий скрипт или колбэк из setTimeout), затем обрабатываются все накопившиеся микрозадачи, и только после этого выбирается следующая макрозадача. Поэтому, если микрозадача создана до того, как сработал таймер, она выполнится раньше.

Пример:

JAVASCRIPT
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
// Вывод: 1, 4, 3, 2

Здесь setTimeout (макрозадача) откладывается, а промис (микрозадача) выполняется сразу после синхронного кода, но до таймера.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью