> Почему setTimeout выполняется после микрозадач в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Cyber Interactive, IT-One
Стек: JavaScript
> Пример ответа
В JavaScript существует цикл событий (Event Loop), который управляет порядком выполнения кода. setTimeout относится к макрозадачам (macrotasks), а промисы и queueMicrotask - к микрозадачам (microtasks). На каждом тике цикла событий сначала выполняется одна макрозадача (например, текущий скрипт или колбэк из setTimeout), затем обрабатываются все накопившиеся микрозадачи, и только после этого выбирается следующая макрозадача. Поэтому, если микрозадача создана до того, как сработал таймер, она выполнится раньше.
Пример:
JAVASCRIPTconsole.log('1');setTimeout(() => console.log('2'), 0);Promise.resolve().then(() => console.log('3'));console.log('4');// Вывод: 1, 4, 3, 2
Здесь setTimeout (макрозадача) откладывается, а промис (микрозадача) выполняется сразу после синхронного кода, но до таймера.
> Похожие задачи по frontend
Что такое map, filter и reduce в JavaScript и в чем их отличие
В чем разница Promise.all и Promise.allSettled в JavaScript и что происходит если один промис падает
Как работать с Promise в цепочках
Что такое самовызывающаяся функция (IIFE) в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью