Page 150 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 150
С учетом этого рассмотрим следующий пример.
1 1 внешний блок
let х = { color : "Ыuе" } ;
let у х ; 1 1 у и х ссылаются на тот же объект
let z = 3 ;
{
1 1 внутренний блок
let х = 5 ; 1 1 внешний х теперь замаскирован
console . l o ( x ) ; 1 1 выводит 5
g
r
g
console . l o ( y . c olo ) ; 1 1 выводит "Ы uе"; объект, на который
1 1 указывает у (и х во внеш н ей области
1 1 видимости) , в с е еще находится в области
1 1 видимости
y . color = " r ed" ;
g
console . l o ( z ) ; 1 1 выводит 3; z не замаскирована
console . l og (x . c olo ) ; 1 1 выводит "red" ; объект изменяется во
r
1 1 внутренней области видимости
g
r
console . l o ( y . c olo ) ; 1 1 выводит "red"; х и у ссылаются на тот
1 1 же объект
g
console . l o ( z ) ; 1 1 выводит 3
Маскировку переменных иногда называют затенением (shadowing)
( т.е. переменная из внешней области видимости попадает в тень пе
ременной с тем же именем во внутренней области). Мне никогда не
нравился этот термин, поскольку тени никогда не скрывают сущнос-
ти полностью, только делают их более темными. Когда переменная
маскируется, она полностью недоступна.
Иерархический характер областей видимости на настоящий момент должен быть
уже понятен: вы можете ввести новую область видимости, не покидая прежней. Это
создает цепь областей видимости, определяющих, какие переменные находятся в об
ласти видимости: все переменные в текущей цепи областей видимости находятся
в области видимости и (пока они не маскируются) вполне доступны.
Функции, замкнутые выражения
и е к сическая область видимости
л
До сих пор мы имели дело только с блоками, которые улучшают нагляд
ность лексической области видимости, особенно если вы выравниваете свои
блоки отступами. Функции, напротив, могут быть определены в одном месте,
Функции, замкнутые выражения и лексическая область видимости 1 5 1

