Определение последовательности вывода console.log при смешанном стеке микротасков и макротасков

Порядок: 1, 7, 3, 5, 2, 6, 4. Таймер 4 создаётся внутри микрозадачи, поэтому регистрируется позже таймеров 2 и 6.

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

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

Порядок: 1, 7, 3, 5, 2, 6, 4. Таймер 4 создаётся внутри микрозадачи, поэтому регистрируется позже таймеров 2 и 6.

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

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

Условие

Необходимо выяснить, в каком порядке будут выводиться сообщения в консоль, учитывая приоритеты выполнения: сначала синхронный код, затем микротаски (Promise), и после них макротаски (setTimeout).

console.log(1);

setTimeout(() => console.log(2));

Promise.resolve().then(() => console.log(3));

Promise.resolve().then(() => setTimeout(() => console.log(4)));

Promise.resolve().then(() => console.log(5));

setTimeout(() => console.log(6));

console.log(7);

Ответ

Порядок: 1, 7, 3, 5, 2, 6, 4. Таймер 4 создаётся внутри микрозадачи, поэтому регистрируется позже таймеров 2 и 6.

Синхронный фрагмент выводит 1 и 7. Затем очередь Promise выполняет вывод 3, регистрацию таймера 4 и вывод 5. Сама регистрация ничего не печатает.

После завершения микрозадач запускаются таймеры с одинаковой задержкой в порядке постановки: 2, 6, 4. Не следует смешивать положение setTimeout в исходном тексте с моментом его фактического вызова внутри then.

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

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

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

Подробнее