Вывод: 1, 2, 6, 4. Числа являются только метками: очередь не сортирует их. Реакция Promise выполняется после скрипта, но до задачи таймера.
Почему сообщение 4 оказывается после сообщения 6?
Вывод: 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 подряд.