Page 149 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 149
Маскировка переменной
Популярным источником недопонимания являются одноименные переменные
или константы в разных областях видимости. Когда области видимости следуют
одна за другой, все относительно просто.
1 1 блок 1
е
const х = ' Ы u ' ;
console . log (х) ; / / выводит "Ыие "
console . l og ( typeof х) ; 1 1 выводит "undefined"; х вне области видимости
{
1 1 блок 2
const х = 3 ;
g
console . l o ( x ) ; 1 1 ВЫВОДИТ ,,3,,
console . l og ( t ypeof х) ; // выводит "undefined"; х вне области видимости
Здесь вполне понятно, что есть две разные переменные, обе по имени х, но в раз
ных областях видимости. Т е перь рассмотрим, что происходит во вложенных областях
видимости.
// внешний блок
let х = ' Ы u ' ;
е
console . l o ( x ) ; 1 1 выводит "Ыие "
g
{
1 1 внутренний блок
let х = 3 ;
console . l o ( x ) ; / / выводит "3 "
g
console . log (х) ; / / выводит "Ыие"
console . l og (typeof х ) ; 1 1 выводит "undefined"; х вне области видимости
Этот пример демонстрирует маскировку переменной (variaЬle masking). Перемен
ная х во внутреннем блоке отличается от таковой во внешнем блоке (хотя и имеет
такое же имя), что в действительности маскирует (или скрывает), переменную х,
определенную во внешней области видимости.
Здесь важно понимать, что, когда процесс выполнения входит во внутренний
блок и определяется новая переменная х, в области видимости находятся обе пере
менные; у нас просто нет никакого способа обратиться к переменной из внешней
области видимости (поскольку у нее то же имя). Сравните это с предыдущим при
мером, где один х входит в область видимости, а затем выходит из нее прежде, чем
вторая переменная х делает то же самое.
1 5 0 Глава 7. Область видимости

