Что такое событийный цикл?
Асинхронность и Event Loop
Событийный цикл (Event Loop) — это механизм, позволяющий однопоточному JavaScript выполнять асинхронный код: он следит за стеком вызовов и очередями задач.
Модель
- Call Stack — синхронный код (одна операция за раз).
- Web API — таймеры, сеть, DOM (вне движка).
- Очередь микрозадач — Promise,
queueMicrotask,await. - Очередь макрозадач — setTimeout, события, I/O.
Алгоритм
1. Выполнить синхронный код (стек).
2. Опустошить ВСЮ очередь микрозадач.
3. Взять ОДНУ макрозадачу.
4. Повторить с шага 2.console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
// 1, 4, 3, 2Зачем нужен
Обеспечивает асинхронность в одном потоке: долгие операции выполняются вне потока, а их коллбэки цикл выполняет, когда стек свободен — интерфейс не блокируется.
Нюансы
- Микрозадачи приоритетнее макрозадач.
- Тяжёлый синхронный код блокирует цикл (UI «замерзает»).
Коротко для собеседования
Event Loop — цикл, который при пустом стеке выполняет все микрозадачи (Promise), затем одну макрозадачу (setTimeout), и так по кругу. Даёт асинхронность в однопоточном JS без блокировки UI. Микрозадачи приоритетнее макрозадач.
Подробнее: learn.javascript.ru — Event Loop