Почему сообщение 4 оказывается после сообщения 6?

Вывод: 1, 2, 6, 4. Числа являются только метками: очередь не сортирует их. Реакция Promise выполняется после скрипта, но до задачи таймера.

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

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

Вывод: 1, 2, 6, 4. Числа являются только метками: очередь не сортирует их. Реакция Promise выполняется после скрипта, но до задачи таймера.

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

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

Условие

Объясните порядок в браузере:

console.log(1);
setTimeout(() => console.log(4), 0);
Promise.resolve().then(() => console.log(6));
console.log(2);

Ответ

Вывод: 1, 2, 6, 4. Числа являются только метками: очередь не сортирует их. Реакция Promise выполняется после скрипта, но до задачи таймера.

Таймер с нулевой задержкой не получает приоритет над микрозадачей и не выполняется в точке вызова setTimeout. Поэтому более ранняя строка регистрации не делает 4 более ранним выводом. Если поместить console.log(4) прямо в синхронный код, порядок станет другим: нужно анализировать место исполнения callback, а не текстовый порядок всех console.log подряд.

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

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

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

Подробнее