Выбор ответа Junior DOM API обновлено

Почему getElementById вернул null

Вопрос

Скрипт подключён в <head> обычным тегом <script src="app.js"></script>, а в нём document.getElementById('app') возвращает null, хотя <div id="app"> в разметке есть. Какой вариант исправит это проще всего?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Добавить defer к тегу скрипта. Обычный скрипт в <head выполняется, пока парсер ещё не дошёл до body, элемента в DOM нет. defer откладывает выполнение до окончания парсинга документа и сохраняет порядок скриптов. querySelector ищет в том же неготовом дереве. async…

Варианты ответа

  1. Заменить на document.querySelector('#app')
  2. Добавить async к тегу скрипта
  3. Обернуть код в setTimeout(..., 0)
  4. Добавить defer к тегу скриптаправильный ответ

Разбор

Обычный скрипт в <head> выполняется, пока парсер ещё не дошёл до body, элемента в DOM нет. defer откладывает выполнение до окончания парсинга документа и сохраняет порядок скриптов. querySelector ищет в том же неготовом дереве. async выполнит скрипт сразу по загрузке, возможно до разбора div. setTimeout(0) не гарантирует, что парсинг закончится к моменту вызова.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме