Как вложенная queueMicrotask меняет очередь сообщений?

Вывод: 0, 1, 2, 3, 4. Вложенная микрозадача добавляется в хвост уже существующей очереди, поэтому не обгоняет ранее поставленную реакцию Promise с числом 2.

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

Что ответить на собеседовании

Вывод: 0, 1, 2, 3, 4. Вложенная микрозадача добавляется в хвост уже существующей очереди, поэтому не обгоняет ранее поставленную реакцию Promise с числом 2.

Подробный разбор

Ответ с пояснениями

Условие

Определите вывод браузерного кода:

queueMicrotask(() => { console.log(1); queueMicrotask(() => console.log(3)); });
Promise.resolve().then(() => console.log(2));
setTimeout(() => console.log(4), 0);
console.log(0);

Ответ

Вывод: 0, 1, 2, 3, 4. Вложенная микрозадача добавляется в хвост уже существующей очереди, поэтому не обгоняет ранее поставленную реакцию Promise с числом 2.

После синхронного 0 очередь содержит callbacks 1 и 2. Во время выполнения 1 в конец добавляется 3. Обработка продолжается до опустошения очереди, затем возможен переход к таймеру с 4. Прямой вызов console.log(3) вместо queueMicrotask внутри первого callback дал бы другой порядок: 0,1,3,2,4.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее