Что такое JavaScript?
Добро пожаловать на курс MDN JavaScript для начинающих! В первой статье курса мы дадим базовое определение JavaScript, ответим на вопросы «Что такое JavaScript?» и «Что он делает?», узнаем как работает JavaScript и как добавить его на веб-страницу.
| Необходимые навыки: | Базовая компьютерная грамотность, знание основ HTML и CSS. |
|---|---|
| Цели: | Знакомство с JavaScript и его возможностями, способами его подключения к веб-странице. |
Определение высокого уровня
JavaScript это язык, который позволяет вам применять сложные вещи на web странице — каждый раз, когда на web странице происходит что-то большее, чем просто её статичное отображение — отображение периодически обновляемого контента, или интерактивных карт, или анимация 2D/3D графики, или прокрутка видео в проигрывателе, и т.д. — можете быть уверены, что скорее всего, не обошлось без JavaScript. Это третий слой слоёного пирога стандартных web технологий, два из которых (HTML и CSS) мы детально раскрыли в других частях учебного пособия.

- HTML — это язык разметки, который мы используем для визуального и смыслового структурирования нашего web контента, например, определяем параграфы, заголовки, таблицы данных, или вставляем изображения и видео на страницу.
- CSS — это язык стилей с помощью которого мы придаём стиль отображения нашего HTML контента, например придаём цвет фону (background) и шрифту, придаём контенту многоколоночный вид.
- JavaScript язык программирования, который позволяет вам создать динамически обновляемый контент, управляет мультимедиа, анимирует изображения, впрочем, делает всё, что угодно. Окей, не все, что угодно, но всё равно, это удивительно, что можно достичь с помощью нескольких строк JavaScript-кода.
Три слоя прекрасно выстраиваются друг над другом. Возьмём простой текст для примера. Для придания структуры и смыслового назначения тексту, разметим его с помощью HTML:
p>Player 1: Chrisp>

Затем мы добавим немного CSS, что бы это выглядело симпатичнее:
p font-family: "helvetica neue", helvetica, sans-serif; letter-spacing: 1px; text-transform: uppercase; text-align: center; border: 2px solid rgba(0, 0, 200, 0.6); background: rgba(0, 0, 200, 0.3); color: rgba(0, 0, 200, 0.6); box-shadow: 1px 1px 2px rgba(0, 0, 200, 0.4); border-radius: 10px; padding: 3px 10px; display: inline-block; cursor: pointer; >

И наконец, добавим немного JavaScript для придания динамического поведения:
const para = document.querySelector(‘p’); para.addEventListener(‘click’, updateName); function updateName()
Попробуйте кликнуть по тексту чтобы увидеть, что произойдёт (Вы так же можете найти это демо на GitHub — смотрите исходный код, или запустите вживую)!
JavaScript может делать намного больше — давайте выясним это более детально.
Так что же он действительно может делать?
Ядро языка JavaScript состоит из некоторого количества обычных возможностей, которые позволяют делать следующее:
- Хранить данные внутри переменных. В примере выше, мы, например, запрашивали ввод нового имени, которое нужно было ввести, затем сохраняли имя в переменной name .
- Операции над фрагментами текстов (известными в программировании как «строки»). В примере выше мы брали строку «Player 1: » и присоединили её к значению переменной name для получения полного текста, например: »Player 1: Chris».
- Запускать код в соответствии с определёнными событиями происходящими на web странице. В нашем примере выше, мы использовали click (en-US) событие, для определения момента, когда кнопка была кликнута, в соответствии с этим запускался код, который обновлял текст.
- И многое другое!
Ещё более увлекательным является функциональность, созданная поверх основного языка JavaScript. Так называемые интерфейсы прикладного программирования (API) предоставляют вам дополнительные сверхспособности для использования в вашем коде JavaScript.
API — это готовые наборы блоков кода, которые позволяют разработчику реализовывать программы, которые в противном случае было бы трудно или невозможно реализовать. Они делают то же самое для программирования, что готовые комплекты мебели делают для домашнего строительства — гораздо проще брать готовые панели и скручивать их вместе, чтобы сделать книжную полку, чем самому разрабатывать дизайн, ходить в поисках правильной древесины, вырезать все панели необходимого размера и формы, найти подходящие винты, а затем собрать их вместе, чтобы сделать книжную полку.
Они обычно делятся на две категории.

API-интерфейсы браузера встроены в ваш веб-браузер и могут отображать данные из окружающего компьютерного окружения или делать полезные сложные вещи. Например:
- API-интерфейс DOM (Document Object Model) позволяет вам манипулировать HTML и CSS, создавать, удалять и изменять HTML, динамически применять новые стили к вашей странице и т. д.. Каждый раз, когда вы видите всплывающее окно на странице или какое-то новое содержимое, Как мы видели выше в нашем простом демо), например, это DOM в действии.
- API геолокации извлекает географическую информацию. Так Google Maps может найти ваше местоположение и нанести его на карту.
- API Canvas и WebGL позволяют создавать анимированные 2D и 3D-графики. Люди делают некоторые удивительные вещи, используя эти веб-технологии — см. Chrome Experiments и webglsamples.
- Аудио и видео API, такие как HTMLMediaElement и WebRTC, позволяют делать действительно интересные вещи с мультимедиа, такие как проигрывание аудио и видео прямо на веб-странице, или захватывать видео с веб-камеры и отображать его на Чужой компьютер (попробуйте наш простой демонстрационный снимок, чтобы понять идею)
Примечание: Большинство наших демо не будут корректно работать в старых браузерах — поэтому будет хорошей идеей, для запуска вашего кода установить один из современных браузеров , таких как Firefox, Chrome, Edge или Opera . Также понадобится более подробно рассмотреть раздел по кроссбраузерному тестированию, когда вы приблизитесь к разработке производственного кода (т.е реального кода, который будут использовать клиенты).
По умолчанию сторонние API-интерфейсы не встроены в браузер, и вам придётся захватывать их код и информацию из какого-либо места в Сети. Для примера:
- Twitter API позволяет вам отображать ваши последние твиты на вашем веб-сайте.
- Google Maps API позволяет вам встраивать пользовательские карты на ваш сайт и другой подобный функционал.
Примечание: Эти API-и являются продвинутыми, и мы не будем их рассматривать в нашем курсе, но ссылки, данные выше, предлагают полную документацию, если вы заинтересованы в более подробной информации.
Доступно ещё больше! Но пока не заостряйте на этом внимание. Вы не сможете создать следующий Facebook, Google Maps или Instagram после 24 часов изучения JavaScript — сначала нужно изучить основы. И именно для этого вы здесь — давайте двигаться дальше!
Что JavaScript делает на вашей странице?
В этой главе мы рассмотрим код и увидим что же действительно происходит, когда на странице запускается JavaScript.
Давайте составим краткий бриф, что же происходит когда мы загружаем страничку в браузере (первое упоминание в статье Как работает CSS). Когда вы загружаете страничку в браузере, вы запускаете ваш код (HTML, CSS и JavaScript) внутри исполняемой среды (внутри вкладки браузера). Это как будто фабрика берёт сырьё (некий код) и выдаёт продукцию (веб-страничку).

Код JavaScript выполняется JavaScript-движком браузера, после того как код HTML и CSS был обработан и сформирован в веб-страницу. Это гарантирует, что структура и стиль страницы уже сформированы к моменту запуска JavaScript.
Это хорошо, так как часто использование JavaScript заключается в динамическом изменении HTML и CSS в целях обновления пользовательского интерфейса посредством Document Object Model API (как упоминалось выше). Если бы запуск JavaScript осуществлялся прежде загрузки HTML и CSS, то это привело бы к возникновению ошибок.
Безопасность браузера
Каждая вкладка браузера представляет собой отдельную коробку для запуска кода (в техническом языке, эти коробки называются «средами исполнения») — это значит, что в большинстве случаев код на каждой вкладке запускается полностью отдельно, а код одной вкладки не может напрямую влиять на код другой вкладки или на другом веб-сайте. Это хорошая мера безопасности — если бы это было иначе, пираты могли написать код, который крал информацию с других сайтов или делал другие плохие вещи.
Примечание: Есть способы отправлять код и данные между разными веб-сайтами/вкладками безопасным способом, но это продвинутые методы, которые мы не будем рассматривать в рамках этого курса.
Последовательность выполнения JavaScript
Обычно, когда браузер сталкивается с блоком JavaScript, он запускает его по порядку, сверху вниз. Это значит, что вам нужно осторожно выбирать порядок. Например, вернёмся к блоку JavaScript, который мы видели в первом примере:
const para = document.querySelector(‘p’); para.addEventListener(‘click’, updateName); function updateName()
Здесь мы выбираем абзац текста (строка 1), а затем добавляем к нему обнаружение событий (строка 3), чтобы при нажатии на этот абзац выполнялся блок кода updateName() (строки 5–8). Блок кода updateName() (эти типы многократно используемых блоков кода называются «функции») запрашивает у пользователя новое имя, а затем вставляет это имя в абзац для обновления отображения.
Если вы поменяете порядок первых двух строк кода, он перестанет работать — вместо этого вы получите ошибку возвращаемую в консоль браузера — TypeError: para is undefined . Это значит, что объект para ещё не существует и вы не можете добавить к нему обнаружение событий.
Примечание: Это очень частая ошибка — вы должны быть осторожны, чтобы объекты, на которые ссылается ваш код, существовали до того, как вы попытаетесь что-то с ними сделать.
Интерпретируемый против компилируемого кода
В контексте программирования, вы можете услышать термины интерпретация и компиляция. JavaScript является интерпретируемым языком — код запускается сверху вниз и результат запуска немедленно возвращается. Вам не нужно преобразовывать код в другую форму, перед запуском в браузере.
С другой стороны, ккомпилируемые языки преобразуются (компилируются) в другую форму, прежде чем они будут запущены компьютером. Например, C / C ++ компилируются в язык ассемблера, который затем запускается компьютером.
Оба подхода имеют разные преимущества, которые на данном этапе мы обсуждать не будем.
Серверный против клиентского кода
Вы так же можете услышать термины серверный и клиентский код, особенно в контексте веб-разработки. Клиентский код — это код, который запускается на компьютере пользователя. При просмотре веб-страницы, клиентский код загружается, а затем запускается и отображается браузером. В этом модуле JavaScript мы явно говорим о клиентском JavaScript.
С другой стороны, серверный код запускается на сервере, затем его результаты загружаются и отображаются в браузере. Примеры популярных серверных веб-языков включают PHP, Python, Ruby и ASP.NET. И JavaScript! JavaScript так же может использоваться, как серверный язык, например в популярной среде Node.js — вы можете больше узнать о серверном JavaScript в нашем разделе Dynamic Websites – Server-side programming.
Слово динамический используется для описания и клиентского JavaScript, и серверного языка — это относится к возможности обновления отображения веб-страницы/приложения, чтобы показывать разные вещи в разных обстоятельствах, генерируя новый контент по мере необходимости. Серверный код динамически генерирует новый контент на сервере, например достаёт данные из базы данных, тогда как клиентский JavaScript динамически генерирует новое содержание внутри браузера на клиенте, например создаёт новую HTML таблицу, вставляя в неё данные полученные с сервера, затем отображает таблицу на веб-странице, которую видит пользователь. В этих двух контекстах значение немного отличается, но связано, и обычно оба подхода (серверный и клиентский) работают вместе.
Веб-страница без динамического обновления контента называется статической — она просто показывает один и тот же контент все время.
Как добавить JavaScript на вашу страницу?
Внутренний JavaScript
- Сначала, сделайте локальную копию нашего файла-примера apply-javascript.html. Сохраните его в удобное для вас место.
- Откройте этот файл в вашем браузере и в вашем текстовом редакторе. Вы увидите, что HTML создаёт простую веб-страницу с активной кнопкой.
- Затем, перейдите в текстовый редактор и добавьте следующие строки перед закрывающим тегом :
script> // здесь будет JavaScript script>
.addEventListener("DOMContentLoaded", function () function createParagraph() let para = document.createElement("p"); para.textContent = "You clicked the button!"; document.body.appendChild(para); > const buttons = document.querySelectorAll("button"); for (let i = 0; i buttons.length; i++) buttons[i].addEventListener("click", createParagraph); > >);
Примечание: вы можете увидеть эту версию на GitHub-е как apply-javascript-internal.html (посмотреть вживую).
Внешний JavaScript
Это отлично работает, но что если мы хотим поместить наш JavaScript в отдельный файл? Давайте сейчас разберёмся с этим.
- Сначала, создайте новый файл в той же папке, что и ваш файл-пример HTML. Назовите его script.js — убедитесь, что у имени файла расширение .js, так как оно распознается, как JavaScript.
- Замените ваш текущий элемент на следующий:
script src="script.js" defer> script>
function createParagraph() let para = document.createElement("p"); para.textContent = "You clicked the button!"; document.body.appendChild(para); > const buttons = document.querySelectorAll("button"); for (let i = 0; i buttons.length; i++) buttons[i].addEventListener("click", createParagraph); >
Примечание: вы можете увидеть эту версию на GitHub-е как apply-javascript-external.html и script.js (посмотреть вживую).
Инлайновые JavaScript обработчики
Обратите внимание, что иногда можно столкнуться с частями JavaScript-кода, который живёт внутри HTML. Это может выглядеть примерно так:
function createParagraph() var para = document.createElement("p"); para.textContent = "You clicked the button!"; document.body.appendChild(para); >
button onclick="createParagraph()">Click me!button>
Вы можете попробовать эту версию в нашей демонстрации ниже:
Эта демонстрация имеет те же функциональные возможности, что и в предыдущих двух разделах, за исключением того, что элемент содержит встроенный обработчик onclick , который запускает функцию при нажатии кнопки.
Но пожалуйста, не делайте этого. Это плохая практика — загрязнять ваш HTML кодом JavaScript, и она не эффективна — вам нужно будет добавить атрибут onclick=»createParagraph()» к каждой кнопке, к которой вы хотите подключить JavaScript.
Использование чистой JavaScript конструкции, позволит вам выбрать все кнопки, используя одну команду. Код, который можно использовали для этой цели, выглядит следующим образом:
const buttons = document.querySelectorAll("button"); for (let i = 0; i buttons.length; i++) buttons[i].addEventListener("click", createParagraph); >
Это может выглядеть немного длиннее, чем атрибут onclick , но это будет работать для всех кнопок, независимо от того, сколько их на странице, и сколько их удалят или добавят. JavaScript менять не нужно.
Примечание: Попробуйте отредактировать вашу версию apply-javascript.html и добавить ещё несколько кнопок в файл. После перезагрузки вы должны увидеть, что все кнопки создают параграф, если кликнуть на них. Классно, да?
Стратегии загрузки скриптов
Существует ряд проблем, связанных с загрузкой скриптов в нужное время. Всё не так просто, как кажется! Распространённой проблемой является то, что весь HTML-код на странице загружается в том порядке, в котором отображается. Если вы используете JavaScript для манипуляции элементами на странице (или, точнее, в DOM – Объектной Модели Документа), ваш код не будет работать, если JavaScript-код загрузится и распознается раньше HTML-кода, с которым вы пытаетесь взаимодействовать.
Комментарии
Так же, как и в HTML и CSS, возможно писать комментарии в вашем JavaScript-коде, что будет проигнорировано браузером, и существует только для того, чтобы давать подсказки вашим друзьям-разработчикам о том, как работает код (и лично вам, если вы вернётесь к коду спустя 6 месяцев и не сможете вспомнить, что вы делали). Комментарии очень полезны, и вы должны часто их использовать, особенно для больших приложений. Вот два типа комментариев:
-
Однострочный комментарий пишется после двойного слеша (//), например:
// Я комментарий
/* Я тоже комментарий */
Так, например, мы можем описать наш последний демо-пример JavaScript подобными комментариями:
// Функция: создаёт новый параграф и добавляет его вниз тела HTML. function createParagraph() var para = document.createElement("p"); para.textContent = "You clicked the button!"; document.body.appendChild(para); > /* 1. Получаем ссылки на все кнопки на странице в виде массива. 2. Перебераем все кнопки и добавляем к ним отслеживатель события нажатия. При нажатии любой кнопки, будет выполняться функция createParagraph(). */ var buttons = document.querySelectorAll("button"); for (var i = 0; i buttons.length; i++) buttons[i].addEventListener("click", createParagraph); >
Выводы
Поздравляем, вы сделали ваш первый шаг в мир JavaScript. Мы начали всего-лишь с теории, чтобы вы привыкли к тому, что вы будете использовать JavaScript, и что именно вы можете делать с его помощью. На этом пути вы увидели несколько примеров кода и выучили, как JavaScript вписывается в остальной код на вашем сайте среди всего прочего.
JavaScript может показаться немного пугающим в данным момент, но не переживайте — в этом курсе мы проведём вас сквозь него простыми шагами, которые имеют смысл, забегая наперёд. В следующей главе мы погрузимся непосредственно в практику, подталкивая вас погрузиться в код и сделать ваши собственные примеры JavaScript.
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 3 авг. 2023 г. by MDN contributors.
Введение в JavaScript
Давайте посмотрим, что такого особенного в JavaScript, чего можно достичь с его помощью и какие другие технологии хорошо с ним работают.
Что такое JavaScript?
Изначально JavaScript был создан, чтобы «сделать веб-страницы живыми».
Программы на этом языке называются скриптами. Они могут встраиваться в HTML и выполняться автоматически при загрузке веб-страницы.
Скрипты распространяются и выполняются, как простой текст. Им не нужна специальная подготовка или компиляция для запуска.
Это отличает JavaScript от другого языка – Java.
Почему JavaScript?
Когда JavaScript создавался, у него было другое имя – «LiveScript». Однако, язык Java был очень популярен в то время, и было решено, что позиционирование JavaScript как «младшего брата» Java будет полезно.
Со временем JavaScript стал полностью независимым языком со своей собственной спецификацией, называющейся ECMAScript, и сейчас не имеет никакого отношения к Java.
Сегодня JavaScript может выполняться не только в браузере, но и на сервере или на любом другом устройстве, которое имеет специальную программу, называющуюся «движком» JavaScript.
У браузера есть собственный движок, который иногда называют «виртуальная машина JavaScript».
Разные движки имеют разные «кодовые имена». Например:
- V8 – в Chrome, Opera и Edge.
- SpiderMonkey – в Firefox.
- …Ещё есть «Chakra» для IE, «JavaScriptCore», «Nitro» и «SquirrelFish» для Safari и т.д.
Эти названия полезно знать, так как они часто используются в статьях для разработчиков. Мы тоже будем их использовать. Например, если «функциональность X поддерживается V8», тогда «Х», скорее всего, работает в Chrome, Opera и Edge.
Как работают движки?
Движки сложны. Но основы понять легко.
- Движок (встроенный, если это браузер) читает («парсит») текст скрипта.
- Затем он преобразует («компилирует») скрипт в машинный язык.
- После этого машинный код запускается и работает достаточно быстро.
Движок применяет оптимизации на каждом этапе. Он даже просматривает скомпилированный скрипт во время его работы, анализируя проходящие через него данные, и применяет оптимизации к машинному коду, полагаясь на полученные знания. В результате скрипты работают очень быстро.
Что может JavaScript в браузере?
Современный JavaScript – это «безопасный» язык программирования. Он не предоставляет низкоуровневый доступ к памяти или процессору, потому что изначально был создан для браузеров, не требующих этого.
Возможности JavaScript сильно зависят от окружения, в котором он работает. Например, Node.JS поддерживает функции чтения/записи произвольных файлов, выполнения сетевых запросов и т.д.
В браузере для JavaScript доступно всё, что связано с манипулированием веб-страницами, взаимодействием с пользователем и веб-сервером.
Например, в браузере JavaScript может:
- Добавлять новый HTML-код на страницу, изменять существующее содержимое, модифицировать стили.
- Реагировать на действия пользователя, щелчки мыши, перемещения указателя, нажатия клавиш.
- Отправлять сетевые запросы на удалённые сервера, скачивать и загружать файлы (технологии AJAX и COMET).
- Получать и устанавливать куки, задавать вопросы посетителю, показывать сообщения.
- Запоминать данные на стороне клиента («local storage»).
Чего НЕ может JavaScript в браузере?
Возможности JavaScript в браузере ограничены ради безопасности пользователя. Цель заключается в предотвращении доступа недобросовестной веб-страницы к личной информации или нанесения ущерба данным пользователя.
Примеры таких ограничений включают в себя:
- JavaScript на веб-странице не может читать/записывать произвольные файлы на жёстком диске, копировать их или запускать программы. Он не имеет прямого доступа к системным функциям ОС. Современные браузеры позволяют ему работать с файлами, но с ограниченным доступом, и предоставляют его, только если пользователь выполняет определённые действия, такие как «перетаскивание» файла в окно браузера или его выбор с помощью тега . Существуют способы взаимодействия с камерой/микрофоном и другими устройствами, но они требуют явного разрешения пользователя. Таким образом, страница с поддержкой JavaScript не может незаметно включить веб-камеру, наблюдать за происходящим и отправлять информацию в ФСБ.
- Различные окна/вкладки не знают друг о друге. Иногда одно окно, используя JavaScript, открывает другое окно. Но даже в этом случае JavaScript с одной страницы не имеет доступа к другой, если они пришли с разных сайтов (с другого домена, протокола или порта). Это называется «Политика одинакового источника» (Same Origin Policy). Чтобы обойти это ограничение, обе страницы должны согласиться с этим и содержать JavaScript-код, который специальным образом обменивается данными. Это ограничение необходимо, опять же, для безопасности пользователя. Страница https://anysite.com , которую открыл пользователь, не должна иметь доступ к другой вкладке браузера с URL https://gmail.com и воровать информацию оттуда.
- JavaScript может легко взаимодействовать с сервером, с которого пришла текущая страница. Но его способность получать данные с других сайтов/доменов ограничена. Хотя это возможно в принципе, для чего требуется явное согласие (выраженное в заголовках HTTP) с удалённой стороной. Опять же, это ограничение безопасности.
Подобные ограничения не действуют, если JavaScript используется вне браузера, например — на сервере. Современные браузеры предоставляют плагины/расширения, с помощью которых можно запрашивать дополнительные разрешения.
Что делает JavaScript особенным?
Как минимум, три сильные стороны JavaScript:
- Полная интеграция с HTML/CSS.
- Простые вещи делаются просто.
- Поддерживается всеми основными браузерами и включён по умолчанию.
JavaScript – это единственная браузерная технология, сочетающая в себе все эти три вещи.
Вот что делает JavaScript особенным. Вот почему это самый распространённый инструмент для создания интерфейсов в браузере.
Хотя, конечно, JavaScript позволяет делать приложения не только в браузерах, но и на сервере, на мобильных устройствах и т.п.
Языки «над» JavaScript
Синтаксис JavaScript подходит не под все нужды. Разные люди хотят иметь разные возможности.
Это естественно, потому что проекты разные и требования к ним тоже разные.
Так, в последнее время появилось много новых языков, которые транспилируются (конвертируются) в JavaScript, прежде чем запустятся в браузере.
Современные инструменты делают транспиляцию очень быстрой и прозрачной, фактически позволяя разработчикам писать код на другом языке, автоматически преобразуя его в JavaScript «под капотом».
Примеры таких языков:
- CoffeeScript добавляет «синтаксический сахар» для JavaScript. Он вводит более короткий синтаксис, который позволяет писать чистый и лаконичный код. Обычно такое нравится Ruby-программистам.
- TypeScript концентрируется на добавлении «строгой типизации» для упрощения разработки и поддержки больших и сложных систем. Разработан Microsoft.
- Flow тоже добавляет типизацию, но иначе. Разработан Facebook.
- Dart стоит особняком, потому что имеет собственный движок, работающий вне браузера (например, в мобильных приложениях). Первоначально был предложен Google, как замена JavaScript, но на данный момент необходима его транспиляция для запуска так же, как для вышеперечисленных языков.
- Brython транспилирует Python в JavaScript, что позволяет писать приложения на чистом Python без JavaScript.
Есть и другие. Но даже если мы используем один из этих языков, мы должны знать JavaScript, чтобы действительно понимать, что мы делаем.
Итого
- JavaScript изначально создавался только для браузера, но сейчас используется на многих других платформах.
- Сегодня JavaScript занимает уникальную позицию в качестве самого распространённого языка для браузера, обладающего полной интеграцией с HTML/CSS.
- Многие языки могут быть «транспилированы» в JavaScript для предоставления дополнительных функций. Рекомендуется хотя бы кратко рассмотреть их после освоения JavaScript.
Как работает JavaScript
Ранее JavaScript предназначался для использования в веб-браузерах, однако ситуация изменилась с развитием Node. Мы знаем, как, где и когда его использовать. Но известно ли, что происходит за этими сценариями?
Даже если вы знаете это, то все равно сможете извлечь полезную информацию из данной статьи.
JavaScript — это высокоуровневый ЯП, а компьютер понимает только единицы и нули. Каким образом компьютер понимает написанный код? В этой статье мы рассмотрим ответ на один единственный вопрос: как работает JavaScript?
Движок JavaScript
Это главный герой, который отвечает за понимание компьютером JS-кода. Движок JavaScript принимает код и преобразует его в машиночитаемый язык. Он выполняет работу переводчика, преобразующего JS-код на понятный компьютеру язык. Как и JS, каждый ЯП также обладает движком, делающий написанный код понятным для компьютера.
У JavaScript есть множество различных движков, доступных для использования. На этой странице Википедии можно найти их список. Они также называются движками ECMAScript (подробнее об этом ниже).
Попробуем заглянуть внутрь движка, чтобы узнать, как преобразуются файлы JavaScript.
Что скрывает движок JavaScript
Движок — это язык, который разбивает код и переводит его. А V8 — это один из самых популярных движков JavaScript, который используется в Chrome и NodeJS и написан на низкоуровневом языке C++. Написать движок может кто угодно, что может привести к путанице.
Для поддержания контроля за этими механизмами был создан стандарт ECMA, который предоставляет характеристики написания движка и всех функций JavaScript. По этой причине в ECMAScript 6, 7, 8 и т. д. реализованы новые функции JavaScript, а движки обновлены для поддержки этих новых функций. Следовательно, необходимо проверять доступность расширенной функции JS в браузерах во время разработки.
Для примера возьмем движок V8, однако основные концепции остаются неизменными во всех движках.
Теперь рассмотрим с более технической точки зрения.
Так выглядит движок JS изнутри. Вводимый код проходит через следующие стадии:
- Парсер
- AST
- Интерпретатор выдает байт-код
- Профайлер
- Компилятор выдает оптимизированный код
Не волнуйтесь, подробности рассмотрим в течение нескольких минут.
Однако для начала разберем важное различие.
Интерпретатор и Компилятор
Есть два способа преобразования кода в машиночитаемый язык. Концепция, о которой мы поговорим, применима не только к JavaScript, но и к большинству ЯП, таких как Python, Java и т. д.
- Интерпретатор читает код построчно и сразу выполняет его.
- Компилятор читает весь код, выполняет оптимизации, а затем производит оптимизированный код.
Рассмотрим на примере.
function add(a, b) return a+b
>for(let i = 0; i < 1000; i++) add(1 + 1)
>
В приведенном выше примере функция add , которая добавляет два числа и возвращает сумму, вызывается 1000 раз.
- При передаче этого файла интерпретатору, он читает его построчно и сразу выполняет функцию, пока цикл не закончится. Таким образом, он просто переводит код в то, что компьютер понимает на ходу.
- При передаче этого файла компилятору, он читает всю программу, выполняет анализ действий и производит оптимизированный код на языке, который понимает машина. Это как взять X (JS-файл) и создать Y (оптимизированный код, понятный машине). Если использовать интерпретатор для Y (оптимизированный код), результат будет таким же, как при интерпретации X (JS-код).
На изображении выше показано, что байт-код — это просто промежуточный код, который необходимо интерпретировать для обработки компьютером. Как интерпретатор, так и компилятор, преобразуют исходный код в машинный код, единственное отличие состоит в том, как выполняется это преобразование.
- Интерпретатор построчно преобразует исходный код в эквивалентный машинный код.
- Компилятор сразу преобразует весь исходный код в машинный код.
Плюсы и минусы интерпретатора и компилятора
- Преимущество интерпретатора заключается в немедленном выполнении кода без необходимости компиляции, что может быть полезно для запуска JS-файлов в браузере. Однако процесс замедляется при необходимости преобразования большего количества JS-кода. Вспомните маленький фрагмент кода, в котором функция вызывалась 1000 раз. В этом случае вывод остается прежним, даже если функция add была вызвана 1000 раз. Такие ситуации замедляют работу интерпретатора.
- В таких случаях компилятор может выполнить некоторые оптимизации, заменив цикл одним числом 2 (1 + 1 добавлялось каждый раз), поскольку он остается неизменным для всех 1000 итераций. Окончательный код, который выдает компилятор, оптимизирован и выполняется намного быстрее.
Таким образом, интерпретатор сразу начинает выполнение кода, но не выполняет оптимизацию. Компилятору требуется время для компиляции кода, однако он выдает более оптимизированный код.
Теперь вернемся к основной схеме движка JS.
Итак, зная плюсы и минусы компилятора и интерпретатора, можно использовать преимущества каждого. Здесь и появляется компилятор JIT (Just In Time). Он представляет собой комбинацию интерпретатора и компилятора, и большинство браузеров теперь реализуют эту функцию для повышения эффективности. Движок V8 также использует эту функцию.
В этом процессе:
- Парсер идентифицирует, анализирует и классифицирует различные части программы. Например, устанавливает, является ли элемент функцией, переменной и т.д. с помощью ключевых слов JavaScript.
- Затем AST (абстрактные синтаксические деревья) создают древовидную структуру на основе классификации парсера. В AST Explorer можно узнать о том, как строится дерево.
- Затем дерево передается интерпретатору, который создает байт-код. Как мы узнали ранее, байт-код не является кодом самого низкого уровня, однако его можно интерпретировать. На этой стадии браузер работает с доступным байт-кодом с помощью движка V8, чтобы пользователю не приходилось ждать.
- В то же время профайлер ищет оптимизации кода, а затем передает входные данные компилятору. Компилятор выдает оптимизированный код, в то время как байт-код временно используется для рендеринга в браузере. Как только компилятор создает оптимизированный код, временный байт-код полностью заменяется новым оптимизированным кодом.
- Таким образом используются лучшие качества интерпретатора и компилятора. Интерпретатор выполняет код, в то время как профайлер ищет оптимизацию, а компилятор создает оптимизированный код. Затем байт-код заменяется оптимизированным кодом, который является кодом более низкого уровня, таким как машинный код.
Это означает, что производительность будет постепенно улучшаться, не блокируя время выполнения.
Примечание по байт-коду
Как и в случае с машинным кодом, не все компьютеры понимают байт-код. Чтобы интерпретировать его на машиночитаемый язык, необходимо промежуточное ПО, такое как виртуальная машина, или движок (например, Javascript V8). По этой причине браузеры могут выполнять этот байт-код из интерпретатора во время вышеупомянутых 5-ти стадий с помощью движков JavaScript.
В результате возникает следующий вопрос:
Является ли JavaScript интерпретируемым языком?
Да, но не совсем. На ранних этапах JavaScript Брендан Айк создал движок JavaScript ‘SpiderMonkey’. У движка был интерпретатор, который говорил браузеру, что нужно делать. Сейчас есть не только интерпретаторы, но и компиляторы, а код не только интерпретируется, но и компилируется для оптимизации. Технически все зависит от реализации.
- Прототипирование для Vue(Opens in a new browser tab)
- Как не лажать с JavaScript. Часть 1
- JavaScript async/await: что хорошего, в чём опасность и как применять?
Что такое JavaScript?

JavaScript – это язык программирования, который используют разработчики для создания интерактивных веб-страниц. Функции JavaScript могут улучшить удобство взаимодействия пользователя с веб-сайтом: от обновления ленты новостей в социальных сетях и до отображения анимации и интерактивных карт. JavaScript является языком программирования при разработки скриптов для выполнения на стороне клиента, что делает его одной из базовых технологий во всемирной сети Интернет. Например, карусель изображения, выпадающее по клику меню и динамично меняющиеся цвета элементов на веб-странице, которые вы видите во время просмотра страниц в Интернете, выполнены при помощи JavaScript.
Для чего используется JavaScript?
Исторически веб-страницы были статичными, похожими на страницы в книге. Статическая страница в основном отображала информацию в фиксированном виде и не выполняла всего того, что мы сейчас ожидаем от современного сайта. Язык JavaScript возник как технология на стороне браузера, позволяющая сделать веб-приложения более динамичными. Используя его, браузеры могли реагировать на взаимодействие с пользователем и менять расположение контента на веб-странице.
По мере развития языка, разработчики JavaScript создали библиотеки, фреймворки и практики программирования и начали использовать его за пределами веб-браузеров. Сегодня JavaScript можно использовать для разработки как на стороне клиента, так и на стороне сервера. В следующих подразделах мы приводим некоторые общие примеры использования.
Исторически веб-страницы были статичными, похожими на страницы в книге. Статическая страница в основном отображала информацию в фиксированном виде и не выполняла всего того, что мы сейчас ожидаем от современного сайта. Язык JavaScript возник как технология на стороне браузера, позволяющая сделать веб-приложения более динамичными. Используя его, браузеры могли реагировать на взаимодействие с пользователем и менять расположение контента на веб-странице.
По мере развития языка, разработчики JavaScript создали библиотеки, фреймворки и практики программирования и начали использовать его за пределами веб-браузеров. Сегодня JavaScript можно использовать для разработки как на стороне клиента, так и на стороне сервера. В следующих подразделах мы приводим некоторые общие примеры использования.
Как работает JavaScript?
Все языки программирования работают путем перевода английского синтаксиса в машинный код, который затем выполняет операционная система. JavaScript в широком смысле можно отнести к категории скриптовых или интерпретируемых языков. Код JavaScript интерпретируется, то есть непосредственно переводится в код машинного языка движком JavaScript. В других языках программирования компилятор обрабатывает весь код в машинный на отдельном этапе. Таким образом, все скриптовые языки являются языками программирования, но не все языки программирования являются скриптовыми.
Движок JavaScript
Движок JavaScript – это компьютерная программа, которая выполняет код JavaScript. Первые движки JavaScript были всего лишь интерпретаторами, но все современные движки используют для повышения производительности JIT-компиляцию или компиляцию во время выполнения.
JavaScript на стороне клиента
JavaScript на стороне клиента относится к тому, как JavaScript работает в вашем браузере. В этом случае движок JavaScript находится внутри кода браузера. Все основные веб-браузеры имеют свои собственные встроенные движки JavaScript.
Разработчики веб-приложений пишут код JavaScript с разными функциями, связанными с различными событиями, такими как щелчок мыши или наведение курсора. Эти функции вносят изменения в HTML и CSS.
Ниже представлен обзор того, как работает JavaScript на стороне клиента.
1. Браузер загружает веб-страницу, когда вы ее посещаете.
2. В процессе загрузки браузер преобразует страницу и все ее элементы, такие как кнопки, ярлыки и выпадающие поля, в структуру данных, называемую объектной моделью документа (DOM).
3. Движок JavaScript браузера преобразует код JavaScript в байткод. Этот код является посредником между синтаксисом JavaScript и машиной.
4. Различные события, такие как щелчок мыши по кнопке, вызывают выполнение связанного блока кода JavaScript. Затем движок интерпретирует байткод и вносит изменения в DOM.
5. Браузер отображает новую DOM.
JavaScript на стороне сервера
JavaScript на стороне сервера относится к использованию языка кодирования в логике внутреннего сервера. В этом случае движок JavaScript находится непосредственно на сервере. Функция JavaScript на стороне сервера может обращаться к базе данных, выполнять различные логические операции и реагировать на различные события, запускаемые операционной системой сервера. Основное преимущество скриптинга на стороне сервера заключается в том, что вы можете в значительной степени настроить ответ сайта в соответствии с вашими требованиями, правами доступа и информационными запросами сайта.
Сторона клиента и сторона сервера
Слово динамический описывает как клиентский, так и серверный JavaScript. Динамическое поведение – это способность обновлять отображение веб-страницы для генерации нового контента по мере необходимости. Разница между JavaScript на стороне клиента и на стороне сервера заключается в генерировании нового контента. Код на стороне сервера динамически генерирует новый контент, используя логику приложения и изменяя данные из базы данных. JavaScript на стороне клиента, с другой стороны, динамически генерирует новый контент внутри браузера, используя логику пользовательского интерфейса и изменяя контент веб-страницы, которая уже находится на стороне клиента. Смысл немного отличается в этих двух контекстах, но они связаны, и оба подхода работают вместе для улучшения пользовательского опыта.
Другое различие между двумя видами использования JavaScript, помимо реализации динамических функций, заключается в ресурсах, к которым код может получить доступ. На стороне клиента браузер контролирует среду выполнения JavaScript. Код может получить доступ только к тем ресурсам, которые ему разрешает браузер. Например, он не может записать содержимое на ваш жесткий диск, если вы не нажмете на кнопку загрузки. С другой стороны, функции на стороне сервера могут получить доступ ко всем ресурсам серверной машины по мере необходимости.
Что такое библиотеки JavaScript?
Библиотеки JavaScript – это коллекции предварительно написанных фрагментов кода, которые веб-разработчики могут повторно использовать для выполнения стандартных функций JavaScript. Код библиотеки JavaScript подключается к остальному коду проекта по мере необходимости. Если вы думаете о коде приложения JavaScript как о доме, то библиотеки JavaScript – это как готовая мебель, которую разработчики могут использовать для улучшения его функциональности.
Ниже приведены примеры использования библиотек JavaScript.
Визуализация данных
Визуализация данных крайне важна для пользователей, чтобы просматривать статистику, например в панели администратора, приборной панели и показателях производительности.
В таких библиотеках, как Chart.js, ApexCharts и Algolia Places, есть встроенные функции, которые можно использовать для создания веб-приложений, отображающих данные в виде графиков и карт.
Манипулирование DOM
Вы можете использовать такие библиотеки, как jQuery и Umbrella JS, чтобы упростить разработку веб-сайтов, поскольку они предоставляют код для стандартных функций сайта, таких как анимация меню, галереи изображений, кнопки, лайтбоксы и многое другое.
Формы
Во всех веб-разработках используются формы, с помощью которых посетители сайта могут связаться с кем-либо, заказать товар или зарегистрироваться на мероприятия. Некоторые библиотеки JavaScript, такие как wForms, LiveValidation, Validanguage и qForms, упрощают функции формы, включая ее проверку, компоновку, условия и преобразование.
Математические и текстовые функции
Многие веб-приложения должны решать математические уравнения, обрабатывать даты, время и текст. Вместо того чтобы отправлять все такие запросы на сервер, эффективнее обрабатывать некоторые из них на стороне клиента. Веб-разработчики делают это с помощью библиотек JavaScript, таких как Date.js, Sylvester и JavaScript URL Library.
Что такое фреймворки JavaScript?
Как и библиотеки JavaScript, фреймворки JavaScript представляют собой набор предварительно написанных фрагментов кода, которые выполняют различные функции и могут быть использованы повторно. Однако если библиотеки JavaScript – это специализированный инструмент для использования по требованию, то фреймворки JavaScript – это полный набор инструментов, который помогает сформировать и организовать любое веб-приложение. Если представить код приложения JavaScript в виде дома, то фреймворк JavaScript – это чертеж, по которому он строится.
Вот некоторые примеры использования фреймворков JavaScript.
Разработка веб- и мобильных приложений
AngularJS – это фреймворк, который упрощает разработку и тестирование веб-приложений, таких как приложения электронной коммерции, приложения реального времени и видеоприложения. React Native – это еще один фреймворк, который поддерживает разработку мобильных приложений с естественным рендерингом для iOS и Android.
Веб-разработка с откликом
Веб-сайты с откликом обеспечивают постоянный пользовательский опыт на любом устройстве. Например, экраны мобильных устройств и планшетов меньше, чем экраны настольных компьютеров и ноутбуков. Вы хотите, чтобы сайт точно отображал и представлял данные даже на маленьком экране, не обрезая, например, концы сайта. Используя такие фреймворки, как Bootstrap и Ember.js, разработчики могут воспользоваться преимуществами отзывчивого дизайна и легко настроить внешний вид сайта на разных платформах.
Разработка приложений на стороне сервера
Node.js – это серверный фреймворк JavaScript с открытым исходным кодом, который запускает код JavaScript вне браузера. Разработчики используют его для создания масштабируемых, быстрых и надежных сетевых приложений на стороне сервера. Он может обрабатывать HTTP-запросы и потоки данных, поддерживать файловые системы и управлять несколькими внутренними процессами одновременно.
Что такое HTML и CSS?
Hypertext Markup Language (HTML) и Cascading Style Sheets (CSS) – два других языка программирования, которые разработчики используют при создании фронтенда. HTML – это основной строительный блок большинства веб-страниц. Все абзацы, разделы, изображения, заголовки и текст написаны на HTML. Контент появляется на сайте в том порядке, в котором он написан в HTML.
CSS – это язык стилевых правил, которые мы используем для применения стиля к содержимому HTML. Вы можете применять его для проектирования элементов сайта, таких как цвета фона, шрифты, колонки и границы.
HTML, CSS и JavaScript
Все три языка используются вместе, чтобы создать положительный пользовательский опыт на любом сайте. Хотя HTML и CSS в основном управляют статическим содержимым, они также могут интегрироваться с кодом JavaScript на стороне клиента для динамического обновления контента.
Например, блок кода сценария на HTML-странице может содержать JavaScript. Затем браузер может обрабатывать как HTML, так и внутренний код JavaScript, когда HTML-страница загружается в браузере.
В чем заключаются преимущества языка JavaScript?
Простота освоения и использования
Синтаксис JavaScript сформирован на основе языка программирования Java, его легко изучить, чтобы написать код. Разработчики используют JavaScript почти в каждом сайте и мобильном приложении для создания сценариев на стороне клиента. В последнее десятилетие Node.js также приобрел значительную популярность для кодирования бэкенда. Многие крупные платформы потокового вещания и видео были разработаны на Node.js.
Независимость от платформы
В отличие от других языков программирования, JavaScript можно вставить в любую веб-страницу и использовать со многими другими механизмами и языками веб-разработки. Написав на нем что-либо, вы можете выполнять код JavaScript на любой машине. Таким образом, JavaScript делает разработку приложений независимой от платформы.
Снижение нагрузки на сервер
Вы можете использовать JavaScript для снижения нагрузки на сервер и перегрузки сети, потому что он может выполнять логические операции и делать большую часть работы сервера на стороне клиента. Например, рассмотрим процесс заполнения регистрационной формы. JavaScript быстро проверяет, ввели ли вы 10-значный номер для поля мобильного телефона. Если бы эти запросы отправлялись на сервер, ваша страница перезагружалась бы при каждой ошибке, что сделало бы процесс регистрации очень медленным и утомительным.
Улучшение пользовательского интерфейса
JavaScript создает веб-сайты, которые делают удобным поиск и обработку сложной информации. Разработчики применяют JavaScript для расширения функциональности и читабельности, а также для повышения эффективности взаимодействия пользователя с сайтом.
Поддержка параллелизма
JavaScript может выполнять несколько различных наборов инструкций параллельно. На сервере Node.js может обрабатывать множество ответов на запросы сервера, нуждаясь при этом в меньшей пропускной способности.
.42131cb0342fa57ce637ca4254eb58ca8fb48845.png)
Какие ограничения актуальны для JavaScript?
В языках программирования переменные используются в качестве держателей для фактических значений данных. Например, в блоке кода разработчик может написать x=5 и y=x+1. Когда код будет запущен, компьютер автоматически изменит x и y на 5 и 6, соответственно, для выполнения функций над ними. Данные могут быть различных типов, например строка текста, число или дата. Именно поэтому большинство языков программирования позволяют определить тип переменной. После определения типа переменной он не меняется; вы не можете хранить числа в строковых переменных.
Например, если вы скажете программе, что x и y – это числа, а затем выполните операцию x+y, компьютер будет знать, что нужно получить два числа и сложить их. С другой стороны, если вы определите x и y как строки, оператор + сложит две строки вместе, чтобы создать более длинное слово.
Слабо типизированный язык
JavaScript является слабо типизированным языком, что означает, что он не позволяет программисту определять тип переменной. Во время выполнения переменная может хранить любой тип данных, а операции принимают тип переменной. Результат также может быть приведен к другому типу данных (например, операция может вернуть результат в виде строки 5 вместо числа 5). Это может привести к случайным ошибкам в кодировании и ошибкам в коде из-за неправильного типа.
Что такое TypeScript?
TypeScript – это язык программирования, который улучшает JavaScript путем добавления типов в синтаксис. TypeScript добавляет дополнительный синтаксис в JavaScript, чтобы инструменты редактора кода могли выявлять ошибки кодирования на ранней стадии. В то же время код TypeScript преобразуется в JavaScript и предоставляет все те же преимущества, что и JavaScript. Он также работает в приложениях и с фреймворками и библиотеками JavaScript.
Что такое AWS SDK для JavaScript?
AWS SDK для JavaScript – это набор бесплатных библиотек JavaScript с открытым исходным кодом для интеграции с сервисами AWS. Они поддерживают разработку API, абстракции более высокого уровня и три типа приложений:
- JavaScript для браузера
- Node.js для сервера
- React Native для разработки мобильных приложений
AWS SDK для JavaScript полностью написан на TypeScript, а затем скомпилирован в JavaScript. Таким образом, вы получаете все преимущества TypeScript, не беспокоясь об обратной совместимости.
Вы можете начать работу с AWS SDK для Java, прочитав примеры кода и руководство по миграции или установив его непосредственно из GitHub.
Что такое AWS Amplify для JavaScript?
AWS Amplify – это набор специально разработанных инструментов и функций, позволяющих разработчикам интерфейса для мобильных и интернет‑приложений быстро и легко создавать полнофункциональные приложения на AWS. Клиентские библиотеки Amplify с открытым исходным кодом обеспечивают ориентированные на конкретные случаи использования, простые в использовании интерфейсы для различных категорий операций с применением облачных технологий. Библиотеки JavaScript Amplify поддерживаются для различных веб-и мобильных фреймворков, включая React, React Native, Angular, Ionic и Vue.js. Вы можете начать, выполнив руководство по началу работы с Amplify JavaScript.