Middle
13
console.log("foo"); setTimeout(() => { console.log("bar"); }, 0); queueMicrotask(() => { console.log("baz"); Promise.resolve() .then(() => console.log("ban")); }); new Promise((resolve) => { console.log("bla"); resolve("baf"); }).then(console.log); console.log("bak"); //// foo bla bak baz baf ban bar
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Разбор вывода кода в JavaScript связан с порядком выполнения микротасков и макротасков в event loop.
Последовательность действий:
-
Выполняется весь синхронный код:
console.log("foo");— выводит "foo"- Создается Promise, внутри которого
console.log("bla");— выводит "bla" console.log("bak");— выводит "bak"
-
Добавляются микротаски:
queueMicrotask(() => { console.log("baz"); Promise.resolve().then(() => console.log("ban")); });.then(console.log)для созданного Promise с результатом "baf"
-
Выполняются микротаски в порядке добавления:
queueMicrotaskвыводит "baz"- Внутри микротаска Promise.then выводит "ban"
- then для Promise выводит "baf"
-
Выполняются макротаски (setTimeout):
setTimeout(() => { console.log("bar"); }, 0);— выводит "bar"
Итоговый вывод:
foo
bla
bak
baz
baf
ban
bar
Обратите внимание, что микротаски выполняются сразу после текущего стека вызовов, а макротаски — после микротасков.