Что выведет код Middle Event loop обновлено

Микрозадача между двумя таймерами

Вопрос

Что выведет код? По строке на каждый вывод.

setTimeout(() => console.log('t-10'), 10);
setTimeout(() => {
  console.log('t-0');
  queueMicrotask(() => console.log('micro из таймера'));
}, 0);
setTimeout(() => console.log('t-0 второй'), 0);
console.log('sync');

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: sync, t-0, micro из таймера, t-0 второй, t-10. Сначала синхронный sync.

Что выведет

sync
t-0
micro из таймера
t-0 второй
t-10

Разбор

Сначала синхронный sync. Таймеры с нулевой задержкой срабатывают в порядке постановки, каждый отдельной задачей. После первой задачи выполняются все микрозадачи, поэтому micro из таймера выводится раньше второго таймера, а не после всех таймеров. Таймер на 10 мс самый поздний, хотя поставлен первым.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме