> Что такое event loop в JavaScript и как он работает с микрозадачами и макрозадачами (JavaScript)

Уровень: junior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы

Компании: ЭНИРАН

Стек: Node.js, JavaScript

> Пример ответа

Event Loop - это механизм, который позволяет JavaScript выполнять неблокирующие асинхронные операции, несмотря на однопоточность. Он постоянно проверяет стек вызовов и очереди задач.

Макрозадачи (macrotasks) - это основные единицы планирования: setTimeout, setInterval, setImmediate (в Node.js), I/O, рендеринг UI. Они попадают в очередь макрозадач.

Микрозадачи (microtasks) - это более приоритетные задачи: Promise.then/catch/finally, queueMicrotask, MutationObserver. Они попадают в очередь микрозадач.

Алгоритм работы:

  1. Выполняется текущая макрозадача (весь синхронный код).
  2. Очищается вся очередь микрозадач (по одной, пока не опустеет).
  3. Если есть микрозадачи, порождённые во время выполнения микрозадач - они тоже выполняются (рекурсивно).
  4. Затем берётся следующая макрозадача из очереди.
  5. Между макрозадачами может произойти рендеринг (в браузере).

Пример:

JAVASCRIPT
console.log('1'); // синхронно
setTimeout(() => console.log('2'), 0); // макрозадача
Promise.resolve().then(() => console.log('3')); // микрозадача
console.log('4'); // синхронно

Вывод: 1, 4, 3, 2. Сначала выполняется весь синхронный код (1 и 4), затем очередь микрозадач (3), и только потом макрозадача (2).

В Node.js цикл событий имеет фазы (таймеры, I/O, idle, poll, check, close), но принцип с микрозадачами тот же: после каждой фазы выполняется вся очередь микрозадач.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью