Что такое Event Loop?
Вопрос
Что такое Event Loop в JavaScript?
Короткий ответ
Event Loop — это механизм, который позволяет JavaScript выполнять асинхронные операции, несмотря на однопоточную модель выполнения.
Подробный ответ
JavaScript выполняет код в одном потоке с помощью Call Stack (стека вызовов). Когда встречается асинхронная операция (setTimeout, сетевой запрос, промис), она передаётся окружению (браузеру или Node.js), а стек продолжает выполнять синхронный код.
Когда асинхронная операция завершается, её callback помещается в очередь:
- Microtask Queue — для промисов (
.then,queueMicrotask), выполняется сразу после текущей синхронной задачи, до следующего рендера. - Macrotask Queue (Task Queue) — для
setTimeout,setInterval, событий DOM.
Event Loop постоянно проверяет: свободен ли Call Stack? Если да — сначала выполняет все микрозадачи, затем берёт одну макрозадачу из очереди.
Пример
console.log('1')
setTimeout(() => {
console.log('2')
}, 0)
console.log('3')
Результат:
1
3
2
setTimeout с задержкой 0 всё равно выполнится после всего синхронного кода, потому что попадает в очередь макрозадач, а не выполняется немедленно.
Дополнительные вопросы
- Что такое Call Stack?
- Что такое Task Queue?
- Чем Microtask Queue отличается от Macrotask Queue?