Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: event loop, asynchronous, call stack, callback queue, microtask, macrotask

вопрос ?

Вопрос проверяет понимание работы Event Loop в JavaScript и его роли в асинхронном выполнении кода.

Короткий ответ

Event Loop — это механизм, который позволяет JavaScript выполнять асинхронные операции, не блокируя основной поток. Он постоянно проверяет, пуст ли Call Stack, и если да, то перемещает задачи из очередей (microtask и macrotask) в стек. Это обеспечивает неблокирующее выполнение кода, например, при обработке событий или таймеров.

Длинный ответ

Что такое Event Loop?

Event Loop — это ключевой компонент среды выполнения JavaScript (например, браузера или Node.js), который управляет выполнением кода, сбором и обработкой событий, а также выполнением подзадач. Он позволяет JavaScript, будучи однопоточным, эффективно обрабатывать асинхронные операции, такие как таймеры, HTTP-запросы или пользовательские события, не блокируя основной поток.

Как это работает?

Event Loop работает в цикле, постоянно проверяя состояние Call Stack (стек вызовов). Если стек пуст, он берет первую задачу из очереди задач (Task Queue) и помещает ее в стек для выполнения. Однако есть два типа очередей:

  • Microtask Queue (очередь микрозадач) — содержит задачи с высоким приоритетом, такие как Promise.then/catch/finally, MutationObserver, queueMicrotask.
  • Macrotask Queue (очередь макрозадач) — содержит задачи с более низким приоритетом, такие как setTimeout, setInterval, I/O, UI rendering.

Важно: после выполнения каждой макрозадачи Event Loop полностью очищает очередь микрозадач перед тем, как перейти к следующей макрозадаче.

Пример кода

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). Это демонстрирует приоритет очередей.

Где применяется?

Понимание Event Loop критично для написания эффективного асинхронного кода, особенно при работе с Promise, async/await, таймерами и обработкой событий. Это помогает избежать проблем с производительностью, таких как зависание интерфейса из-за блокировки стека.

Вывод: Event Loop — это основа асинхронности в JavaScript. Его понимание необходимо для создания отзывчивых веб-приложений и серверных решений на Node.js, где важна неблокирующая обработка запросов.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#event loop

#asynchronous

#call stack

#callback queue

#microtask

#macrotask

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.