Порядок вывода: 1, 4, 6, 3, 2, 5. Синхронные сообщения идут первыми, затем обработчик Promise, после него два таймера в порядке регистрации.
Порядок вывода сообщений в консоль в JavaScript (пример 101)
Порядок вывода: 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 не позволяет ему прервать текущий стек.