Вопрос проверяет понимание механизма работы setTimeout в контексте event loop, очередей задач и микротасок в JavaScript.
Когда вы вызываете setTimeout(callback, delay), браузер или Node.js запускает таймер. По истечении указанной задержки (delay) callback не выполняется сразу, а помещается в очередь макрозадач (macrotask queue). Это специальная очередь, в которую попадают задачи от setTimeout, setInterval, событий ввода-вывода, рендеринга и других.
Event loop — это бесконечный цикл, который следит за стеком вызовов и очередями задач. Его работа выглядит так:
Таким образом, callback из setTimeout будет выполнен только после того, как завершится весь синхронный код и все микротаски.
console.log('1');
setTimeout(() => {
console.log('2');
}, 0);
Promise.resolve().then(() => {
console.log('3');
});
console.log('4');
// Вывод: 1, 4, 3, 2Здесь сначала выполняются синхронные console.log('1') и console.log('4'). Затем event loop обрабатывает микротаску (Promise), выводя '3'. И только потом берёт макрозадачу из setTimeout и выводит '2'.
Понимание этого механизма важно для написания предсказуемого асинхронного кода, особенно при работе с таймерами, промисами и событиями. Это помогает избежать ошибок, связанных с порядком выполнения, и оптимизировать производительность приложений.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию