В чем разница между Микрозадачей и Макрозадачей в JavaScript

«В чем разница между Микрозадачей и Макрозадачей в JavaScript» — вопрос из категории Асинхронность, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Микрозадачи (microtasks) и макрозадачи (macrotasks) — это два типа задач в Event Loop.

  • Микрозадачи выполняются сразу после текущего синхронного кода, до рендеринга и следующих макрозадач.
    Примеры: Promise.then/catch/finally, queueMicrotask, MutationObserver.

  • Макрозадачи выполняются после рендеринга и микрозадач.
    Примеры: setTimeout, setInterval, requestAnimationFrame, I/O-операции.

Пример:

console.log('Start');

setTimeout(() => console.log('Timeout'), 0); // макрозадача

Promise.resolve().then(() => console.log('Promise')); // микрозадача

console.log('End');

Вывод:

Start  
End  
Promise  
Timeout