Объясните порядок вывода в этом JavaScript‑кейсе и почему он такой: "console.log('A'); setTimeout(()=>console.log('B'),0); Promise.resolve().then(()=>console.log('C')); console.log('D');" — какие концепции event loop и микротасков здесь задействованы

30 Апр в 10:46
15 +1
0
Ответы
1
Вывод будет в порядке: A D C B.
Краткое пошаговое объяснение (числа в порядке выполнения):
111 Выполняются синхронные инструкции сверху вниз: `console.log('A')` печатает "A".
222 `setTimeout(..., 000)` не выполняет callback сразу — он ставит его в очередь макротасков (task queue) с задержкой 000.
333 `Promise.resolve().then(...)` добавляет callback в очередь микротасков (microtask queue, job queue).
444 Синхронный `console.log('D')` выполняется и печатает "D".
После того как текущий стек вызовов опустел:
555 Event loop сначала опустошает очередь микротасков: выполняется `.then(...)` → печатается "C".
666 Только потом берётся следующий макротаск из очереди (здесь — callback от `setTimeout`) → печатается "B".
Почему так: микротаски (промисы) имеют более высокий приоритет и запускаются сразу после завершения текущего таска/стека, но до выполнения следующего макротаска (`setTimeout`). Значение задержки 000 не гарантирует немедленного выполнения — это просто минимальная задержка перед помещением callback в очередь макротасков.
(Примечание: в браузере микротаски также выполняются перед перерисовкой; в Node есть дополнительные фазы event loop и `process.nextTick`, у которого ещё более высокий приоритет.)
30 Апр в 10:52
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир