Назад к вопросам
Wildberries
Middle
2
let a = 5; setTimeout(function timeout() { //macro console.log(a); a = 10; }, 0); let p = Promise.resolve().then(data => { console.log(a); a = 25; resolve(); }).then() console.log(a); // 5 25 25
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Разберём порядок вывода значений в данном коде:
let a = 5;
setTimeout(function timeout() { // macro task
console.log(a); // 25
a = 10;
}, 0);
let p = Promise.resolve().then(data => { // micro task
console.log(a); // 5
a = 25;
}).then();
console.log(a); // 5
Пояснение:
- Сначала выполняется весь синхронный код, поэтому
console.log(a);выводит5. - Затем выполняются микротаски (Promise), где
console.log(a);выведет5, а потомaизменится на25. - После микротасков выполняются макротаски (setTimeout), где
console.log(a);выведет уже25, так какaбыло изменено в микротаске.
Итоговый вывод будет:
5
5
25
В вашем примере указан вывод 5 25 25, что не соответствует реальному порядку. Возможно, ошибка в комментариях или в понимании порядка событий в Event Loop.