Перейти к содержимому

JavaScript: старое ключевое слово «var»

В JavaScript способ создания и использования переменных напрямую влияет на поведение кода. Ключевое слово var используется уже десятилетия для объявления переменных. В этой главе объясняется, как работает var, его правила области видимости и актуальность в современной веб-разработке.

Введение в объявление переменных с помощью var

Ключевое слово var в JavaScript используется для объявления переменной, при необходимости инициализируя её значением. Переменные, объявленные через var, имеют функциональную или глобальную область видимости и подвержены поднятию (hoisting), что может приводить к поведению, неожиданному для разработчиков, пришедших из других языков программирования. подробнее об объявлении переменных

Функциональная область видимости

Переменные, объявленные с помощью var внутри функции, являются локальными для этой функции и доступны в любом месте внутри неё. Эта особенность функциональной области видимости означает, что такие переменные, даже если они объявлены внутри блока (например, в операторе if), доступны на протяжении всей функции.


Output appears here after Run.

Поднятие (Hoisting)

Поднятие (Hoisting) — это механизм JavaScript, при котором объявления переменных и функций перемещаются в начало содержащей их области видимости на этапе компиляции. Для переменных, объявленных через var, это означает, что к ним можно обратиться до их объявления в коде.


Output appears here after Run.

В этом примере переменная y поднимается, поэтому она известна в пределах всей области видимости функции, но не инициализируется до тех пор, пока выполнение не дойдёт до её объявления, что приводит к выводу undefined вместо ReferenceError.

Глобальные переменные и ключевое слово var

Когда var используется для объявления переменной вне любой функции, она становится глобальной переменной, доступной из любой части кода. В средах браузера это также прикрепляет переменную в качестве свойства к объекту window, что отличается от поведения let и const. Однако это может потенциально привести к конфликтам и непреднамеренному поведению, особенно в больших или сложных кодовых базах.


javascript
var globalVar = "I am global";

Ограничения var и современные альтернативы

Хотя var был фундаментальной частью JavaScript, он имеет ограничения, которые привели к появлению let и const в ES6 (ECMAScript 2015), предлагающих объявления переменных с блочной областью видимости.

Поднятие переменных и путаница с областью видимости

Поведение при поднятии и функциональная область видимости var могут вызывать путаницу, особенно в циклах или условных блоках, где интуитивно ожидается блочная область видимости переменных.

Повторное объявление var и особенности замыканий в циклах

  • Повторное объявление: В отличие от let и const, var позволяет повторно объявлять одну и ту же переменную в той же области видимости без выброса ошибки.
  • Замыкания в циклах: При использовании в циклах var захватывает переменную цикла по ссылке. Это часто приводит к неожиданным результатам в замыканиях или асинхронных колбэках, поскольку все итерации разделяют одно и то же конечное значение.
Output appears here after Run.

Появление let и const

Чтобы смягчить проблемы, связанные с var, let и const предоставляют разработчикам переменные с блочной областью видимости, снижая риск ошибок из-за поднятия и делая код более предсказуемым и удобным для отладки.

Лучшие практики использования var в JavaScript

Несмотря на свои ограничения, var остаётся частью языка JavaScript и всё ещё может встречаться, особенно в унаследованном коде. Соблюдение лучших практик гарантирует, что его использование не окажет негативного влияния на функциональность или поддерживаемость кода.

  1. Ограничьте использование в современном коде: Предпочитайте let и const для объявления переменных, чтобы воспользоваться преимуществами блочной области видимости и снизить потенциальные проблемы с поднятием.
  2. Понимайте область видимости: При работе с var учитывайте его функциональную область видимости и соответствующим образом планируйте структуру кода, чтобы предотвратить создание непреднамеренных глобальных переменных.
  3. Инициализация при объявлении: Инициализируйте переменные var в момент объявления, чтобы избежать значений undefined из-за поднятия.

Заключение

Ключевое слово var давно является краеугольным камнем JavaScript. Понимание его поведения в области видимости и механизма поднятия является ключом к написанию надёжного кода. По мере развития языка были введены let и const, чтобы устранить ограничения var, сделав современный JavaScript более предсказуемым. Однако понимание var остаётся необходимым для поддержки унаследованных кодовых баз. Следуя лучшим практикам и предпочитая объявления с блочной областью видимости, разработчики могут писать более чистый и поддерживаемый JavaScript.

Практика

Какие из следующих утверждений о ключевом слове 'var' в JavaScript являются верными?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.