Порядок: 1, 7, 3, 5, 2, 6, 4. Таймер 4 создаётся внутри микрозадачи, поэтому регистрируется позже таймеров 2 и 6.
Определение последовательности вывода console.log при смешанном стеке микротасков и макротасков
Порядок: 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.