You don't know js(up & going)


Области видимости функций


Download 424.95 Kb.
Pdf ko'rish
bet32/53
Sana08.11.2023
Hajmi424.95 Kb.
#1757840
1   ...   28   29   30   31   32   33   34   35   ...   53
Bog'liq
You don\'t know JS(up & going)

Области видимости функций
Вы используете ключевое слово `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();

Download 424.95 Kb.

Do'stlaringiz bilan baham:
1   ...   28   29   30   31   32   33   34   35   ...   53




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling