> Что такое микрозадачи и макрозадачи (JavaScript)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: Т-Банк, МТГ Бизнес решения
Стек: JavaScript
> Пример ответа
Микрозадачи и макрозадачи - это два типа очередей в цикле событий (Event Loop) JavaScript, которые определяют порядок выполнения асинхронного кода.
Макрозадачи - это задачи, которые ставятся в очередь после завершения текущего синхронного кода. К ним относятся: таймеры (setTimeout, setInterval), события DOM (например, клики), загрузка ресурсов (fetch, XMLHttpRequest), а также рендеринг страницы. Они выполняются по одной за цикл.
Микрозадачи - это задачи с более высоким приоритетом, которые выполняются сразу после завершения текущего синхронного кода и до обработки следующей макрозадачи. К ним относятся: Promise.then/catch/finally, queueMicrotask, MutationObserver, а также async/await (после await код продолжается как микрозадача).
Порядок выполнения:
-
Выполняется весь синхронный код (стек вызовов).
-
Очищается вся очередь микрозадач (одна за другой).
-
Берется одна макрозадача из очереди и выполняется.
-
Цикл повторяется.
Пример:
JAVASCRIPTconsole.log('1'); // синхронноsetTimeout(() => console.log('2'), 0); // макрозадачаPromise.resolve().then(() => console.log('3')); // микрозадачаconsole.log('4'); // синхронно// Вывод: 1, 4, 3, 2
Микрозадача (3) выполняется перед макрозадачей (2), так как очередь микрозадач очищается сразу после синхронного кода. Это важно для понимания порядка выполнения асинхронных операций в JavaScript, особенно при работе с промисами и таймерами.
> Похожие задачи по frontend
Как узнать фактически переданное количество аргументов в функцию в JavaScript
Какие методы массива мутируют его в JavaScript
Что такое bind в JavaScript и как он работает
Как реализовать функцию add в JavaScript, которая накапливает аргументы и возвращает сумму при вызове без аргументов
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью