> Каков порядок выполнения задач (task) и микротасков (microtask) в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: циан, IT-One, Purrweb, SmartWay
Стек: JavaScript
> Пример ответа
Порядок выполнения в JavaScript основан на цикле событий (Event Loop). Сначала выполняется синхронный код в стеке вызовов (call stack). Затем, когда стек пуст, обрабатываются микротаски (microtask), такие как Promise.then/catch/finally, queueMicrotask, MutationObserver. После того как все микротаски выполнены, берется один макротаск (task) из очереди макротасков (например, setTimeout, setInterval, события DOM, fetch). После его выполнения снова проверяется очередь микротасков - и так циклически.
Важно: микротаски имеют приоритет над макротасками. Если во время обработки микротасков добавляются новые микротаски, они будут выполнены до перехода к следующему макротаску. Это может привести к бесконечной рекурсии, если не контролировать добавление микротасков.
Пример:
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).
> Похожие задачи по frontend
Почему стрелочную функцию нельзя использовать как конструктор в JavaScript
В чем разница между Promise.all, Promise.any и Promise.race в JavaScript
Можно ли изменять массивы и объекты, объявленные через const в JavaScript?
В чем разница между Promise.all и Promise.allSettled в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью