Области видимости функций
Вы используете ключевое слово `var`, чтобы объявить переменную, которая
принадлежит области видимости текущей функции или глобальной области, если
находится на верхнем уровне вне любой функции.
Поднятие переменной (hoisting)
Где бы ни появлялось `var` внутри области видимости, это объявление
принадлежит всей области видимости и доступно в любом месте внутри области.
Метафорически это поведение называется *поднятие (hoisting)*, когда
объявление `var` концептуально "перемещается" на вершину своей объемлющей
области видимости. Технически этот процесс более точно объясняется тем, как
компилируется код, но сейчас опустим эти подробности.
Пример:
_________________________________________________________________________________
var a = 2;
foo();
// работает, так как определение `foo()`
// "всплыло"
function foo() {
a = 3;
console.log( a );
// 3
var a;
// определение "всплыло"
// наверх `foo()`
}
console.log( a );
// 2
_________________________________________________________________________________
**Предупреждение:** Не общепринято и не так уж здраво полагаться на
*поднятие* переменной, чтобы использовать переменную раньше в ее области
видимости, чем появится ее объявление с `var`: такое может сбить с толку.
Общепринято и приемлемо использовать *всплытие* объявлений функций, что
мы и делали с вызовом `foo()`, появившемся до ее объявления.
Вложенные области видимости
Когда вы объявляете переменную, она доступна везде в ее области видимости,
так же как и в более нижних/внутренних областях видимости. Например:
_________________________________________________________________________________
function foo() {
var a = 1;
function bar() {
var b = 2;
function baz() {
var c = 3;
console.log( a, b, c );
// 1 2 3
}
baz();
console.log( a, b );
// 1 2
}
bar();
console.log( a );
// 1
}
foo();
Do'stlaringiz bilan baham: |