Page 145 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 145
Область видимости и существован и е переменных
Интуитивно понятно, что если переменной не существует, ее нет и в области ви
димости. Таким образом, переменные, которые еще не были объявлены, или пере
менные, которые прекратили существование после выхода из функции, очевидно не
находятся в области видимости.
А наоборот? Если переменная не находится в области видимости, то означает ли это,
что ее не существует? Вовсе не обязательно, и именно здесь необходимо сделать разли
чие между областью видимости (scope) и существованием (existence) переменной.
Область видимости (или видимость (visiЬility)) относится к идентификаторам, ко
торые в настоящее время видимы и доступны выполняющейся в данный момент час
ти программы (называемой контекстом выполнения (execution context)). Существо
вание, напротив, относится к идентификаторам, которые содержат нечто, для чего
была распределена (т.е. зарезервирована) область памяти. Скоро мы увидим примеры
переменных, которые существуют, но не находятся в области видимости.
Когда нечто прекращает существовать, JavaScript не обязательно освобождает па
мять сразу же: она просто помечается как не используемая и освобождается только
при периодически запускаемом процессе сборки мусора (garbage collection). Сборка
мусора в JavaScript осуществляется автоматически и будет вас интересовать только
в определенных чрезвычайно требовательных приложениях.
и
Л е к сическая л и д и н а м и ческая область видимости
Глядя на исходный код программы, вы видите ее лексическую структуру (lexical
structure). Когда программа выполняется фактически, поток выполнения может быть
не последовательным. Рассмотрим программу с двумя функциями.
t
(
func i on fl ) {
console . l og ( ' on ' ) ;
e
(
function f2 ) {
o
console . log ( ' t w ' ) ;
f2 ) ;
(
f 1 ( ) ;
(
f2 ) ;
Лексически эта программа - просто набор операторов, которые мы обычно чи
таем сверху вниз. Но когда мы запускаем эту программу, поток выполнения пере
ходит сначала к телу функции f2, затем - к телу функции fl (даже при том, что она
определена до f2) и наконец - снова к телу функции f2.
1 4 6 Глава 7. Область видимости

