При работе с JavaScript вам необходимо понимать, как работает область действия. В JavaScript существует три типа областей видимости, которые вам нужно знать, и у каждого из них есть свои уникальные правила относительно того, где переменные и функции хранятся и доступны. Существуют три разных типа области видимости: глобальная, функциональная и блочная. Мы подробно рассмотрим каждый из них в этом посте.
Глобальный охват
Глобальная область относится к самой внешней области в вашем коде. По сути, если он не написан внутри функции или блока, считается, что он находится в глобальной области видимости. Любая переменная или функция, которую вы объявляете в глобальной области видимости, будет доступна из любого места вашего кода. Это очень полезно, если вам нужно получить доступ к данным и разделить их между различными частями вашего кода. Хотя это может быть проблемой, потому что может быть сложно отследить, где используется переменная и как она изменяется.
Давайте посмотрим на этот пример:
let x = 10; function foo() { console.log(x); } foo();
В этом коде переменная x
объявлена в глобальной области видимости. Функция foo
также объявлена в глобальной области видимости, поэтому она имеет доступ к переменной x
и записывает ее значение в консоль. Когда мы вызываем foo
, он регистрирует значение x
, которое равно 10
.
Объем функций
Область действия функции относится к области действия, которая создается каждый раз, когда вы объявляете функцию. Любая функция или переменная, которую вы объявляете внутри функции, доступна только внутри этой функции. Это полезно для создания переменных и функций, которые необходимы только внутри этой конкретной функции. Это поможет организовать ваш код и предотвратит конфликты имен с переменными и функциями, объявленными в других частях вашего кода.
Давайте посмотрим на этот пример:
function foo() { let x = 10; console.log(x); } foo(); console.log(x); // ReferenceError: x is not defined
В этом коде переменная x
объявлена внутри функции foo, meaning
, она только доступна внутри этой функции. Когда мы вызываем foo
, он регистрирует значение x
, которое равно 10
. Однако, если мы попытаемся зарегистрировать значение x
вне функции, мы получим ошибку ссылки, поскольку x
не определено в глобальной области видимости.
Область блока
Область блока относится к области, создаваемой каждый раз, когда код записывается внутри блока кода. В JavaScript блок создается путем написания кода внутри фигурных скобок {}
. Любые переменные, объявленные внутри блока, доступны только внутри этого блока. Как и область действия функции, это полезно для организации вашего кода и предотвращения конфликтов имен с переменными, которые объявлены в других частях вашего кода.
Давайте посмотрим на этот пример:
if (true) { let x = 10; console.log(x) } console.log(x); // ReferenceError: x is not defined
В этом коде переменная x
объявляется внутри блока операторов if
. Это означает, что он доступен только в этом блоке кода. Когда мы запустим этот код, он запишет значение x
, то есть 10
. Однако, если мы попытаемся зарегистрировать значение x
за пределами блока кода, мы получим ошибку ссылки, поскольку x
не определено в глобальной области видимости.
Важно понимать, что внутри области блока только переменные, объявленные с помощью const
и let
, относятся к области блока. Любые переменные, объявленные с помощью var
, не относятся к блоку.
Давайте посмотрим на этот пример:
if (true) { var x = 10; } console.log(x)
В этом коде эта переменная x
объявляется внутри блока операторов if
с использованием var
. Это означает, что x
также будет доступен за пределами этого блока кода в глобальной области видимости. Когда мы регистрируем значение x
вне блока кода, оно регистрирует значение x
, то есть 10
.
Пока вы объявляете свои переменные с помощью const
и let
, у вас никогда не будет проблем. Теперь, если вы забудете использовать какое-либо из ключевых слов объявления, вы столкнетесь с другой проблемой. Любая переменная, объявленная без использования каких-либо из этих ключевых слов, всегда доступна в глобальной области видимости, независимо от того, где они находятся в вашем коде.
Давайте посмотрим на этот пример:
if (true) { x = 10; } console.log(x)
Хотя x объявлен внутри блока операторов if в этом коде, он был объявлен без использования const
, let
или var
. Это означает, что когда мы регистрируем значение x
вне блока кода, оно будетдоступно в глобальной области видимости.
Понимание трех типов области видимости важно для организации вашего кода и, в конечном счете, для облегчения отладки. Хорошей практикой является объявление переменных и функций только там, где они необходимы, если несколько строк кода могут получить доступ к переменной, которая должна была быть доступна только один раз, это сделает ваш процесс отладки более сложным, поскольку у вас будет больше мест для проверки на наличие ошибок. если вы обнаружите какие-либо ошибки или ваша переменная может содержать непредвиденное значение.