Привет, мир!

данные≈ 6 минут

Здесь будет встроен видео-разбор темы (5–7 минут, YouTube / RuTube / VK Видео) — тем, кто лучше воспринимает на слух, текст ниже не обязателен.

Пора написать первую программу и увидеть её результат своими глазами. Заодно разберёмся, как JavaScript вообще попадает на страницу и по каким правилам записываются его команды.

Разделы темы:·

Браузер сам по себе умеет показывать разметку и стили, а оживает страница благодаря скриптам. Чтобы браузер выполнил JavaScript, код помещают в тег <script> — всё, что находится внутри, движок воспринимает как программу и запускает. Стоит этот тег в том же HTML-файле, что и остальная разметка: из чего такой файл складывается и чем служебный <head> отличается от видимого <body>, разобрано в прологе, в статье про скелет страницы.

У тега два режима работы. Можно писать код прямо между <script> и </script> — удобно для пары строк. А можно вынести программу в отдельный файл и подключить его атрибутом src: <script src="app.js"></script>. Совмещать нельзя: если указан src, код внутри тега игнорируется.

Реальные проекты почти всегда держат код в файлах, и на то есть две причины. Во-первых, один файл можно подключить на десятке страниц — браузер скачает его один раз, а дальше возьмёт из кеша. Во-вторых, разметка отдельно от логики: и ту и другую проще читать и менять.

Браузер читает страницу сверху вниз и, встретив <script>, останавливается: сначала выполнить код, потом читать дальше. Если тяжёлый скрипт стоит в начале, посетитель смотрит на пустой экран. Поэтому классический приём — ставить скрипты в самый конец, перед </body>.

Современный способ — оставить тег в <head>, но добавить атрибут defer: <script src="app.js" defer></script>. Браузер скачает файл в фоне, а выполнит после того, как разберёт всю разметку. Пока запомните это как готовый рецепт, а чем defer отличается от async и почему важен порядок скриптов, разбирает статья «defer, async и куда ставить скрипт» в части II.

defer = «скачай сейчас, запусти после разметки»

По традиции первая программа на любом языке печатает «Привет, мир!». Наша уложится в одну строку: команда console.log выводит текст в консоль — служебную панель браузера для разработчика.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Здесь, в учебнике, результат виден прямо под примером, но привычку заглядывать в настоящую консоль браузера стоит завести с первого дня — как её открыть и что она ещё умеет, разбирает статья «Консоль браузера: первый инструмент отладки». Оттуда нам понадобится одно: значений в console.log можно передать сколько угодно — через запятую, и печатаются они в одну строку через пробел.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

В старых учебниках первая программа показывает модальное окно командой alert. Она работает и сейчас, но окно блокирует страницу, пока пользователь не нажмёт «ОК», поэтому в реальном коде alert почти не встречается — разве что для быстрых экспериментов.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Комментарий — текст, который движок пропускает, не выполняя. Однострочный начинается с // и тянется до конца строки. Многострочный открывается /*, закрывается */ и может занимать сколько угодно строк.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Хороший комментарий объясняет «почему», а не пересказывает код: причину неочевидного решения, обход бага, ссылку на задачу. Второе применение — временно выключить кусок кода при отладке: закомментировал, проверил, вернул обратно. Одна ловушка: /* */ не бывает вложенным — первый же */ закрывает комментарий.

Программа — это список инструкций: сделай раз, сделай два. Друг от друга их отделяет точка с запятой. Каждый наш вызов console.log(...) — отдельная инструкция, поэтому в конце строки стоит ;. Технически можно записать несколько инструкций и в одну строку, но читать такое тяжело.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Формально JavaScript умеет расставлять точки с запятой сам: в большинстве случаев перенос строки он считает концом инструкции. Но именно «в большинстве»: если следующая строка начинается со скобки ( или [, движок склеит её с предыдущей — и получится ошибка, которую трудно заметить глазами. Поэтому правило простое: точку с запятой ставим всегда и не тратим силы на пограничные случаи.

Классический пример: после строки нет точки с запятой, а следующая начинается с [. Движок решает, что это продолжение предыдущей инструкции — обращение к строке по индексу, — и программа падает. Одна точка с запятой после "Привет" всё чинит.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

  • JavaScript попадает на страницу через тег <script>: код пишут прямо внутри тега или подключают файлом через атрибут src.
  • Внешние файлы удобнее инлайн-кода: браузер их кеширует, а один скрипт можно подключить на многих страницах.
  • Рабочий рецепт размещения: <script src="..." defer> в <head> — скрипт скачивается в фоне и не задерживает отрисовку.
  • console.log печатает значения в консоль разработчика (F12) — главный инструмент ближайших глав.
  • Комментарии // и /* */ движок пропускает, а точку с запятой ставим после каждой инструкции — не полагаясь на автоподстановку.

1/3Как правильно подключить к странице файл app.js?

2/3В коде две строки:
// console.log("раз")
console.log("два");
Что появится в консоли?

3/3Что делает атрибут defer у тега <script>?

Представься консоли

Напечатайте в консоль три строки: приветствие «Привет, мир!», своё имя и любимое число. Каждая строка — отдельная инструкция, и каждая заканчивается точкой с запятой.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Три вызова подряд: console.log("Привет, мир!");, затем console.log("Рико"); и console.log(42);. Каждая инструкция — на своей строке и со своей точкой с запятой.

Почини вывод

Этот код должен напечатать два слова — «Привет» и «мир», но печатает только одно. Найдите причину и исправьте, не удаляя ни одной строки с console.log.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Вторая инструкция обёрнута в комментарий /* */, поэтому движок её пропускает. Уберите /* и */ — и обе строки напечатаются.