Область действия JavaScript

Изучите основы JavaScript Scope

Область видимости - это набор правил, определенных в языке программирования для определения значения переменной.

JavaScript используетлексическая область видимости, что означает, что значение переменной определяется ее позицией при записи. Не когда он вызывается, что случается с альтернативой,динамическое определение объема.

Область видимости - это набор переменных, которые видны части программы.

У нас есть глобальная область действия, область действия блока и область действия. Если переменная определена вне функции или блока, она присоединяется к глобальному объекту и имеет глобальную область видимости, что означает, что она доступна в каждой части программы.

Есть очень важное различие междуvar,letиconstдекларации.

Переменная, определенная какvarвнутри функции виден только внутри этой функции. Так же, как параметры функции.

Переменная, определенная какconstили жеletс другой стороны, виден только внутри того блока, в котором он находится.

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

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

Это то, что я имею в виду. Даже если вы объявитеvarв конце функции, ее объявление перемещается вверх:

function run() {
  console.log(`${name}`)
  var name = 'Flavio'
}

run()

Это печатает «undefined», потому что на самом деле происходит следующее:

function run() {
  var name;
  console.log(`${name}`)
  name = 'Flavio'
}

run()

letиconstне «страдают» от подъема. Если вы воспользуетесь одним из них в приведенном выше примере, вы получите сообщение об ошибке:ReferenceError: name is not defined.

В JavaScript переменные родительской функции также доступны внутренним функциям. Объем внутренней функции также включает в себя объем родительской функции, и это называется закрытием (мы поговорим об этом более подробно позже).

Есть одна мелочь, о которой вам нужно знать. В нестрогом режиме, если вы используете переменную без ее объявления, где бы вы это ни делали, эта переменная будет прикреплена к глобальной области видимости. Что может быть плохим источником ошибок. Итак, убедитесь, что вы всегда объявляете переменные перед их использованием. Просто помните об этом, но это еще одна причина использовать по умолчанию строгий режим, который решает эту проблему. О строгом режиме поговорим позже.

Помните: любая переменная, определенная в функции (или блоке) с тем же именем, что и глобальная переменная, имеет приоритет над глобальной переменной, затеняя ее.

Это печатаетundefined:

var name = 'Roger'

function run() { console.log(</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) var name = ‘Flavio’ }

run()

и это вызывает ошибкуReferenceError: name is not defined:

let name = 'Roger'

function run() { console.log(</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) let name = ‘Flavio’ }

run()

Скачать мою бесплатнуюРуководство для начинающих по JavaScript


Больше руководств по js: