Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Что такое Event Loop?

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

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

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

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

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

Ключевые компоненты

Для понимания Event Loop нужно знать несколько связанных структур:

  • Call Stack: Стек вызовов, где выполняются синхронные функции. Каждый вызов функции помещается в стек, а после завершения — удаляется.
  • Web APIs: Функциональность, предоставляемая средой (браузером или Node.js), такая как setTimeout, fetch, DOM-события. Когда вызывается такая асинхронная операция, она передаётся Web API, а основной поток продолжает работу.
  • Callback Queue (Task Queue): Очередь, в которую Web API помещает готовые к выполнению колбэки от асинхронных операций (например, колбэк от setTimeout).
  • Microtask Queue: Отдельная очередь с более высоким приоритетом, в которую помещаются колбэки от Promise.then, async/await, MutationObserver.

Как работает цикл событий

Event Loop работает по непрерывному циклу. Его основное правило: сначала выполнить весь синхронный код до опустошения Call Stack. Затем он проверяет очередь микрозадач (Microtask Queue) и выполняет все задачи из неё, пока она не опустеет. Только после этого он берёт одну задачу из очереди макрозадач (Callback Queue) и помещает её в Call Stack. Этот процесс повторяется бесконечно.

Пример кода и порядок выполнения

console.log('1'); // Синхронный вызов

setTimeout(() => {
    console.log('2'); // Макрозадача (Callback Queue)
}, 0);

Promise.resolve().then(() => {
    console.log('3'); // Микрозадача (Microtask Queue)
});

console.log('4'); // Синхронный вызов

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

Где это применяется

Понимание Event Loop критично для написания эффективного и неблокирующего кода. Оно помогает избегать "подвисаний" интерфейса при долгих вычислениях, правильно работать с асинхронными операциями (запросы к API, чтение файлов, таймеры) и отладке сложного порядка выполнения кода.

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

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

#event loop

#call stack

#callback queue

#microtask queue

#asynchronous JavaScript

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию