Sobes.tech
Back to questions
Middle
4

FE forked forked forked forked forked forked ```JavaScript console.log('Таймаут'); // 4 }, 0); let p = new Promise(function(resolve, reject) { console.log('Создание промиса'); // 1 resolve(); }); p.then(function(){ console.log('Обработка промиса'); // 3 }); console.log('Конец скрипта'); // 2 Усложненный кейс console.log(1); setTimeout(() => console.log(2)); Promise.resolve().then(() => console.log(3)); Promise.resolve().then(() => setTimeout(() => console.log(4))); Promise.resolve().then(() => console.log(5)); setTimeout(() => console.log(6)); console.log(7); ```

Companies where asked
IGaming

Answer from AI

sobes.tech AI

Разберём порядок вывода в данном коде JavaScript, учитывая особенности event loop, микротасков (Promises) и макротасков (setTimeout).

Код:

console.log(1);

setTimeout(() => console.log(2));

Promise.resolve().then(() => console.log(3));

Promise.resolve().then(() => setTimeout(() => console.log(4)));

Promise.resolve().then(() => console.log(5));

setTimeout(() => console.log(6));

console.log(7);

Пояснение:

  • Сначала выполняется весь синхронный код:

    • console.log(1) -> выводит 1
    • console.log(7) -> выводит 7
  • Затем выполняются микротаски (Promise.then):

    • console.log(3)
    • setTimeout(() => console.log(4)) — это макротаск, добавленный в очередь таймаутов
    • console.log(5)
  • После микротасков выполняются макротаски (setTimeout):

    • console.log(2)
    • console.log(6)
    • console.log(4) (из setTimeout внутри Promise.then)

Итоговый порядок вывода:

1
7
3
5
2
6
4

Это демонстрирует, что микротаски (Promises) выполняются сразу после синхронного кода и до макротасков (setTimeout), а setTimeout внутри микротаска добавляется в очередь макротасков и выполняется позже.