Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: setTimeout, event loop, callback queue, macrotask, JavaScript

Какой путь проходит callback функции setTimeout до момента его вызова — через какие очереди и механизмы он проходит?

Вопрос проверяет понимание механизма работы setTimeout в контексте event loop, очередей задач и микротасок в JavaScript.

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

Когда вызывается setTimeout, его callback помещается в очередь макрозадач (macrotask queue). Event loop постоянно проверяет, не пуст ли стек вызовов. Когда стек пуст, он берет первый callback из очереди макрозадач и помещает его в стек для выполнения. Перед этим он обрабатывает все микротаски (например, Promise). Таким образом, callback выполняется после завершения текущего синхронного кода и всех микротасок.

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

Как setTimeout попадает в очередь макрозадач

Когда вы вызываете setTimeout(callback, delay), браузер или Node.js запускает таймер. По истечении указанной задержки (delay) callback не выполняется сразу, а помещается в очередь макрозадач (macrotask queue). Это специальная очередь, в которую попадают задачи от setTimeout, setInterval, событий ввода-вывода, рендеринга и других.

Роль event loop

Event loop — это бесконечный цикл, который следит за стеком вызовов и очередями задач. Его работа выглядит так:

  • Проверить, пуст ли стек вызовов.
  • Если стек пуст, обработать все микротаски (например, Promise.then, queueMicrotask).
  • Затем взять одну задачу из очереди макрозадач и поместить её в стек для выполнения.
  • После выполнения задачи цикл повторяется.

Таким образом, 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

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

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

#setTimeout

#event loop

#callback queue

#macrotask

#JavaScript

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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