Какой вывод из предложенных вариантов всегда будет верным при выполнении данного JavaScript-кода, учитывая порядок выполнения асинхронных операций?

28.02.2026 20:21
Обновлено: 01.03.2026 09:14

Подробное объяснение

Код демонстрирует работу event loop в JavaScript. Сначала выполняются все синхронные операции: выводятся 1 и 7. Затем обрабатываются микрозадачи (Promise): выводится 4. После этого выполняются макрозадачи (setTimeout) и колбэки requestAnimationFrame, но их относительный порядок может варьироваться. Однако последовательность 1 → 7 → 4 всегда сохраняется, так как синхронный код и микрозадачи имеют приоритет перед асинхронными операциями.

Часто задаваемые вопросы (FAQ)

1 Что такое микрозадачи и макрозадачи в JavaScript?
Микрозадачи (например, Promise.then) выполняются сразу после текущего синхронного кода, до перехода к следующей макрозадаче. Макрозадачи (например, setTimeout) обрабатываются в отдельных циклах event loop.
2 Как работает requestAnimationFrame в event loop?
requestAnimationFrame выполняется перед отрисовкой кадра в браузере, обычно после микрозадач, но до следующих макрозадач. Его точное время зависит от частоты кадров.
3 Почему Promise.then выполняется раньше setTimeout с нулевой задержкой?
Микрозадачи (Promise) имеют более высокий приоритет в event loop. Они обрабатываются сразу после синхронного кода, в то время как setTimeout, даже с задержкой 0, является макрозадачей и выполняется в следующем цикле.

Типичные ошибки

1 Считать, что requestAnimationFrame блокирует выполнение микрозадач
Микрозадачи выполняются до requestAnimationFrame, так как они обрабатываются в том же цикле event loop, что и синхронный код, а rAF ждёт следующего кадра.
2 Думать, что setTimeout(..., 0) выполняется мгновенно
Даже с нулевой задержкой setTimeout является макрозадачей и выполняется только после всех синхронных операций и микрозадач текущего цикла event loop.
3 Предполагать, что порядок между разными setTimeout или между setTimeout и requestAnimationFrame фиксирован
Относительный порядок выполнения различных асинхронных операций (например, нескольких setTimeout или между setTimeout и rAF) может зависеть от таймингов браузера и не гарантирован.

Установите расширение Poresh.Ai

Решайте тесты мгновенно с помощью искусственного интеллекта прямо в браузере

Автоматическое распознавание вопросов
ИИ-анализ и подробные объяснения
Работает на любых образовательных платформах
Безопасно и конфиденциально