Что напечатает JavaScript‑код с таймаутом и промисом

Будут выведены Шаг 2, Шаг 4, Шаг 3, Шаг 1. Executor Promise вызывается синхронно, а обработчик then — после завершения текущего стека.

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

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

Будут выведены Шаг 2, Шаг 4, Шаг 3, Шаг 1. Executor Promise вызывается синхронно, а обработчик then — после завершения текущего стека.

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

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

Условие

Определите порядок вывода строк в консоль при выполнении следующего скрипта.

setTimeout(function timeout() {
  console.log("Шаг 1");
}, 0);

let promiseObj = new Promise(function (resolve, reject) {
  console.log("Шаг 2");
  resolve();
});

promiseObj.then(function () {
  console.log("Шаг 3");
});

console.log("Шаг 4");

Ответ

Будут выведены Шаг 2, Шаг 4, Шаг 3, Шаг 1. Executor Promise вызывается синхронно, а обработчик then — после завершения текущего стека.

SetTimeout лишь планирует отдельную задачу. Даже при задержке 0 она начнётся после готовых микрозадач. Поэтому создание Promise не откладывает Шаг 2, но then откладывает Шаг 3.

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

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

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

Подробнее