Куда помещать JavaScript
Вы уже знаете, что JavaScript добавляет поведение. Следующий вопрос практический: куда положить код, чтобы браузер его нашёл, а нужные элементы уже существовали?
Куда следует помещать JavaScript на HTML-странице?
Помещайте JavaScript в элемент <script> — либо встроенно между тегами, либо внешне через src на файл .js. Для повседневной работы новичка, который трогает страницу, ставьте скрипт прямо перед </body>, чтобы HTML выше был готов. Когда код растёт, переносите его во внешний файл, сохраняя ту же привычку в конце body (позже узнаете defer).
Три варианта размещения одним взглядом
📊 Где может жить JavaScript
| Вариант | Где находится | Лучшее применение для новичка |
|---|---|---|
| Встроенно в head | <script> внутри <head> |
Только крошечная настройка; риск, если элементов ещё нет |
| Встроенно в конце body | <script> прямо перед </body> |
По умолчанию для коротких демо, меняющих заголовок или текст |
Внешний файл .js |
<script src="app.js"> (часто конец body) |
По умолчанию, когда логика растёт или файл переиспользуется |
Скрипт в head (знать и использовать осторожно)
Скрипт в head выполняется рано, пока браузер ещё читает документ. Это может задержать видимое содержимое. Если код сразу ищет элемент через getElementById, его может ещё не быть — результат null или ошибка.
<!DOCTYPE html>
<html>
<head>
<title>Where To — Head</title>
<script>
console.log("Head script ran early");
</script>
</head>
<body>
<h1>Content comes after the head script</h1>
</body>
</html>
Когда скрипт в head уместен
- Логировать сообщение или задать простое значение без DOM
- Загружать библиотеку с современными атрибутами (позже встретите
defer/async) - Не ваш вариант по умолчанию для демо «измени этот абзац» в этом курсе
Скрипт в конце body (по умолчанию для новичка)
Сначала разметка, нужная посетителям. Затем выполните скрипт. Элементы с id выше скрипта уже есть в документе, когда выполняются инструкции.
<!DOCTYPE html>
<html>
<head>
<title>Where To — Body End</title>
</head>
<body>
<h1 id="title">Loading…</h1>
<p>HTML arrives first; then the script updates the heading.</p>
<script>
document.getElementById("title").textContent =
"Ready — script ran at the end of body";
</script>
</body>
</html>
Почему эта привычка помогает
- Заголовок и абзац могут появиться до окончания работы скрипта
getElementById("title")находит реальный узел- Короткие демо остаются в одном файле, пока вы учите язык
- Позже те же инструкции переносите во внешний файл, не меняя идею
Внешний файл JavaScript (по умолчанию для проекта)
Структуру оставьте в HTML, логику — в app.js. Укажите файл через src. Пути относительны к HTML, если не задана папка.
<!DOCTYPE html>
<html>
<head>
<title>Where To — External</title>
</head>
<body>
<h1 id="title">Loading…</h1>
<script src="app.js"></script>
</body>
</html>
document.getElementById("title").textContent =
"Loaded from app.js";
Почему внешний файл выигрывает при росте
- Один
.jsможет обслуживать несколько страниц - Редакторы ярче подсвечивают JavaScript в отдельном файле
- Вы избегаете огромных блоков
<script>в разметке - Неверный путь
srcмолча не срабатывает — смотрите Console и Network, если ничего не бежит
Порядок важен
Браузер читает сверху вниз. Скрипт выполняется, когда парсер до него доходит (если позже не используются продвинутые атрибуты). Если первой строке нужен #title, этот элемент должен быть выше скрипта в HTML, либо ждите завершения документа. Конец body — простой способ получить правильный порядок.
Попробуйте сами
- Создайте
where.htmlс примером конца body. Откройте и убедитесь, что заголовок обновился. - Измените строку
textContent, сохраните и обновите страницу. - Создайте
app.jsс JavaScript внешнего примера. Вwhere.htmlоставьте только<script src="app.js"></script>перед</body>. - Временно переименуйте
app.jsили сломайте путьsrc, обновите и смотрите Console — затем исправьте путь. - По желанию: перенесите тот же скрипт в head (без
defer) и увидите, чтоgetElementByIdможет упасть; верните в конец body.
Типичные ошибки
- Класть обновляющий DOM скрипт в head, чтобы
getElementByIdсработал до появления элемента - Подключать
<script src="app.js">с опечаткой или неверной папкой — страница выглядит нормально, но ничего не выполняется - Оставлять сотни строк встроенными в каждый HTML вместо общего
.js - Путать этот урок с подключением CSS: стили — через
<link>/<style>; поведение — через<script>
Итог
- JavaScript живёт в
<script>— встроенно или черезsrcк файлу.js - Конец body — удобный по умолчанию вариант, когда код трогает элементы страницы
- Скрипты в head выполняются рано; не обновляйте там DOM, пока не знаете атрибуты загрузки
- Внешние файлы — проектный стандарт, когда демо растут
- Порядок скрипта следует порядку документа, пока позже не появятся продвинутые опции
- Практикуйтесь, разделяя рабочее встроенное демо на HTML +
app.js
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху