Sobes.tech
Back to questions
Middle
1

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

Companies where asked
WildberriesWildberries

Answer from AI

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

Пояснение:

  1. Сначала выполняется весь синхронный код, поэтому console.log(a); выводит 5.
  2. Затем выполняются микротаски (Promise), где console.log(a); выведет 5, а потом a изменится на 25.
  3. После микротасков выполняются макротаски (setTimeout), где console.log(a); выведет уже 25, так как a было изменено в микротаске.

Итоговый вывод будет:

5
5
25

В вашем примере указан вывод 5 25 25, что не соответствует реальному порядку. Возможно, ошибка в комментариях или в понимании порядка событий в Event Loop.