Проанализируйте пример на JavaScript: "setTimeout(()=>console.log(1),0); Promise.resolve().then(()=>console.log(2)); console.log(3);" Объясните порядок вывода и почему
Порядок вывода: 3,2,13, 2, 13,2,1. Короткое объяснение по шагам: - Синхронный код выполняется сразу: `console.log(333)` печатает 333. - `Promise.resolve().then(...)` ставит коллбек в очередь микрозадач (microtask/job). Микрозадачи выполняются сразу после завершения текущего стека вызовов, но до следующей макрозадачи. Поэтому печатается 222. - `setTimeout(..., 000)` ставит коллбек в очередь макрозадач (timers/task). Даже с задержкой 000 он выполнится только после того, как завершатся текущая синхронная работа и все микрозадачи — поэтому `console.log(111)` выводится последним. Итого: сначала синхронный вывод (333), затем микрозадачи (Promise → 222), затем макрозадачи (setTimeout → 111).
Короткое объяснение по шагам:
- Синхронный код выполняется сразу: `console.log(333)` печатает 333.
- `Promise.resolve().then(...)` ставит коллбек в очередь микрозадач (microtask/job). Микрозадачи выполняются сразу после завершения текущего стека вызовов, но до следующей макрозадачи. Поэтому печатается 222.
- `setTimeout(..., 000)` ставит коллбек в очередь макрозадач (timers/task). Даже с задержкой 000 он выполнится только после того, как завершатся текущая синхронная работа и все микрозадачи — поэтому `console.log(111)` выводится последним.
Итого: сначала синхронный вывод (333), затем микрозадачи (Promise → 222), затем макрозадачи (setTimeout → 111).