Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: mutationobserver, script, browser, promise

Является ли код внутри тега <script> макрозадачей?

Этот вопрос помогает разобраться в понятии макрозадач и их роли в процессе выполнения JavaScript-кода. Знание о том, как работает Event Loop и какие операции считаются макрозадачами, важно для понимания асинхронного поведения JavaScript.

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

Код внутри тега <script> выполняется синхронно и не является макрозадачей. Когда браузер загружает страницу, он сначала выполняет весь синхронный код, содержащийся в теге <script>, и только после завершения этого выполнения переходит к обработке других задач в очереди, таких как макрозадачи и события. Макрозадачи включают асинхронные операции, такие как setTimeout или обработчики событий.

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

В JavaScript существует две категории задач, которые управляют тем, как выполняется код: макрозадачи и микрозадачи.

  • Макрозадачи:
    Макрозадачи представляют собой более крупные блоки работы, которые ставятся в очередь и выполняются по мере освобождения стека выполнения. Примеры макрозадач включают:

    • setTimeout

    • setInterval

    • Обработчики событий (например, клики мыши)

  • Микрозадачи:
    Микрозадачи — это более мелкие задачи, которые имеют более высокий приоритет и обрабатываются после выполнения текущего стека выполнения, но до выполнения следующей макрозадачи.

    Примеры микрозадач включают:

    • Обработчики промисов (Promise.then и Promise.catch)

    • Обработчики MutationObserver

  • Синхронный код:
    Код, находящийся внутри тега <script>, выполняется синхронно. Это значит, что он будет выполняться сразу же, как только браузер встретит тег <script>, и до завершения этого кода браузер не будет обрабатывать другие макрозадачи или события.

    <script>
    	console.log('This is a script tag'); 
    </script>

    В этом примере сообщение будет выведено в консоль сразу, прежде чем браузер начнет выполнять какие-либо макрозадачи.

Порядок выполнения:
Рассмотрим следующий код:

<script>
	console.log('Script Start'); 
	setTimeout(() => {    
			console.log('Timeout Task');    
	}, 0);    
	console.log('Script End'); 
</script>

Здесь сначала будет выведено Script Start, затем Script End, а затем, после завершения всех синхронных операций, будет выполнена макрозадача Timeout Task.


Знание о том, что код внутри тега <script> не является макрозадачей, помогает разработчикам:

  • Правильно организовать порядок выполнения кода и асинхронных операций.

  • Избежать неожиданных задержек и блокировок в приложениях.

  • Улучшить производительность, управляя выполнением задач.

Таким образом, понимание различий между макрозадачами, микрозадачами и синхронным кодом позволяет разработчикам создавать более эффективные и отзывчивые веб-приложения.

Уровень

  • Рейтинг:

    3

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

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

#mutationobserver

#script

#browser

#promise

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