В каком порядке выполняются скрипты?
Продвинутые темы
Скрипты выполняются в порядке их расположения в HTML, но атрибуты `async` и `defer` меняют это: `defer` сохраняет порядок (после DOM), `async` — нет (по мере загрузки).
Обычные скрипты (без атрибутов)
Выполняются синхронно, в порядке появления в HTML, блокируя парсинг:
<script src="a.js"></script> <!-- 1-й -->
<script src="b.js"></script> <!-- 2-й, после a.js -->defer
Загружаются параллельно, выполняются после построения DOM, в порядке объявления:
<script defer src="a.js"></script> <!-- выполнится 1-м -->
<script defer src="b.js"></script> <!-- 2-м -->async
Загружаются параллельно, выполняются сразу по загрузке — порядок не гарантирован (какой раньше скачался):
<script async src="a.js"></script>
<script async src="b.js"></script>
<!-- порядок зависит от скорости загрузки -->Итоговый порядок
- Обычные — по порядку в HTML, блокируют парсинг.
- defer — по порядку, после DOM.
- async — по мере загрузки, без гарантии порядка.
- Модули (
type="module") — по умолчанию какdefer.
Коротко для собеседования
Обычные скрипты выполняются по порядку в HTML, блокируя парсинг. defer — параллельная загрузка, выполнение после DOM с сохранением порядка. async — выполнение по мере загрузки, порядок не гарантирован. Модули по умолчанию ведут себя как defer.