04. Lexical Scope
Область видимости переменной - это те места в программе, где переменная доступна для использования (чтения/записи):
Если переменная объявлена как верхнего уровня (глобальная), то её областью видимости является всё текущее окружение.
Если переменная объявлена внутри модуля, то её области видимости является весь модуль.
Если переменная объявлена внутри функции, то её областью видимости является функция.
Если переменная объявлена как
let
илиconst
и объявлена внутри блока кода, то областью видимости данной переменной будет данный блок кода (функция, или модуль).
В JS область видимости переменной определяется по её расположению в коде (это очевидно лексически), и вложенные функции имеют доступ к переменным, объявленным вовне. Этот механизм и называется Lexical scoping (область действия, ограниченная лексически).
Variable resolution
Каждый раз при обращении к переменной интерпретатору требуется её значение, то выполняется поиск её значения. Этот процесс называется разрешением переменной (variable resolution):
Выполнить поиск определения
x
в ближайшем окружении.Если ближайшее окружение имеет свойство с именем
x
, то использовать его значение.Ближайшее окружение не имеет свойства с именем
x
, то продолжать поиск в следующем окружении в цепочке.Если второе окружение не имеет свойства с именем
x
, интерпретатор переходит к следующему объекту и т. д.Если ни один из объектов в цепочке областей видимости не имеет свойства с именем
x
, то интерпретатор считает, что переменнаяx
находится вне области видимости данного программного кода и возбуждает ошибкуReference Error
.
Last updated
Was this helpful?