Sobes.tech
Middle

Кодтың келесі нәтижесі қандай? ```javascript console.log(1); setTimeout(() => { console.log(2); }, 0); Promise.resolve().then(() => { console.log(3); }); console.log(4); setTimeout(() => { Promise.resolve().then(() => { console.log(5); }); }, 0); ```

sobes.tech AI

AI-дан жауап

Шығу келесідей болады:

1
4
3
2
5

Шығу тәртібінің түсіндірмесі:

  1. console.log(1); — синхронды шақыру, 1 шығарады.
  2. setTimeout(..., 0) — колбекті макротасқалар кезегіне қояды, кейінірек орындалады.
  3. Promise.resolve().then(...) — колбекті микротасқалар кезегіне қояды, ағымдағы стек аяқталғаннан кейін, бірақ макротасқалардан бұрын орындалады.
  4. console.log(4); — синхронды шақыру, 4 шығарады.

Синхронды код аяқталғаннан кейін:

  • Микротасқалар орындалады: console.log(3);
  • Содан кейін setTimeout-тан макротасқалар: алдымен console.log(2);
  • Екінші setTimeout Promise.resolve().then(...) шақырады, ол микротасқаны орналастырады, ол ағымдағы макротасқадан кейін console.log(5); орындалады.

Осылайша, тәртіп: 1, 4, 3, 2, 5.