Асинхронность — Event Loop
В JavaScript асинхронность принципиальна для обработки запросов параллельно с загрузкой страницы.
Event loop
«Event loop в JavaScript — менеджер асинхронных вызовов.» JavaScript однопоточен; event loop управляет порядком выполнения через стек вызовов, очередь и Web API браузера.
Три компонента
- Call Stack (стек вызовов) — где выполняется синхронный код (LIFO)
- Web API — обрабатывает async операции (setTimeout, fetch, события DOM)
- Queue (очередь) — ждёт, пока стек освободится
Пример
const foo = () => console.log('First')
const bar = () => setTimeout(() => console.log('Second'), 500)
const baz = () => console.log('Third')
bar()
foo()
baz()
// Вывод: "First", "Third", "Second"
Микрозадачи vs макрозадачи
console.log('start')
setTimeout(() => console.log('setTimeout'), 0) // макрозадача
Promise.resolve().then(() => console.log('promise')) // микрозадача
console.log('end')
// Вывод: start, end, promise, setTimeout
Микрозадачи (Promises) выполняются перед макрозадачами (setTimeout, setInterval).