Когда нельзя использовать defer

«Когда нельзя использовать defer» — вопрос из категории HTML, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

defer не стоит использовать, если:

  1. Нужен точный порядок выполнения скриптовdefer сохраняет порядок, но если скрипты зависят друг от друга динамически (например, загрузка через document.createElement('script')), порядок может нарушиться.

  2. Скрипт должен выполняться до рендеринга страницыdefer откладывает выполнение до полной загрузки DOM, но до события DOMContentLoaded. Если нужен ранний запуск (например, для критического функционала), лучше использовать async или встроенный скрипт.

  3. Скрипт зависит от других асинхронных ресурсов – если скрипт ждёт данные из другого async-скрипта или API, defer не гарантирует, что зависимый ресурс загрузится первым.

Пример:

<!-- Плохо: скрипт зависит от динамически загруженного кода -->
<script defer src="main.js"></script>
<script>
  // Этот код выполнится ДО main.js, хотя может зависеть от него
  console.log(window.someVarFromMain); // undefined
</script>