Порядок вывода сообщений в консоль в JavaScript (пример 101)

Порядок вывода: 1, 4, 6, 3, 2, 5. Синхронные сообщения идут первыми, затем обработчик Promise, после него два таймера в порядке регистрации.

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

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

Порядок вывода: 1, 4, 6, 3, 2, 5. Синхронные сообщения идут первыми, затем обработчик Promise, после него два таймера в порядке регистрации.

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

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

Условие

Определите, в какой последовательности появятся записи в консоли при выполнении приведённого ниже кода, и объясните, почему именно так происходит.

console.log(1);

setTimeout(function() {
  console.log(2);
});

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

console.log(4);

setTimeout(function() {
  console.log(5);
}, 0);

console.log(6);

Ответ

Порядок вывода: 1, 4, 6, 3, 2, 5. Синхронные сообщения идут первыми, затем обработчик Promise, после него два таймера в порядке регистрации.

Promise.resolve(3).then(console.log) передаёт обработчику значение 3, но вызывает его не немедленно. После завершения синхронного фрагмента микрозадача печатает 3.

У первого setTimeout задержка не указана, у второго равна 0; в данном обычном случае оба ставят отдельные отложенные задачи. Первый зарегистрирован раньше, поэтому выводит 2 перед 5. Порядок регистрации then относительно синхронных console.log не позволяет ему прервать текущий стек.

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

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

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

Подробнее