You don't know js(up & going)


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

_________________________________________________________________________________
Заметьте, что `c` не доступна внутри `bar()`, потому что она объявлена только
внутри внутренней области видимости `baz()` и `b` не доступна в `foo()` по той
же причине.
Если вы попытаетесь получить доступ к значению переменной в области
видимости, где она уже недоступна, вы получите `ReferenceError`. Если вы
попытаетесь установить значение переменной, которая еще не объявлена, все
либо закончится тем, что переменная создастся в самой верхней глобальной
области видимости (плохо! , либо получите ошибку в зависимости от "строгого
режима" (см. "Строгий режим"). Давайте взглянем:
_________________________________________________________________________________
function foo() {
a = 1; // `a` формально не объявлена
}
foo();
a;
// 1 — упс, автоматическая глобальная переменная :(
_________________________________________________________________________________
Это очень плохая практика. Не делайте так! Всегда явно объявляйте свои
переменные.
В дополнение к созданию объявлений переменных на уровне функций, ES6
*позволяет* вам объявлять переменные, принадлежащие отдельным блокам
(пара `{ .. }`), используя ключевое слово `let`. Кроме некоторых едва уловимых
деталей, правила области видимости будут вести себя точно так же, как мы
видели в функциях:


_________________________________________________________________________________
function foo() {
var a = 1;
if (a >= 1 {
let b = 2;
while (b < 5 {
let c = b * 2;
b++;
console.log( a + c );
}
}
}
foo();
// 5 7 9
_________________________________________________________________________________
Из-за использования `let` вместо `var`, `b` будет принадлежать только
оператору `if` и следовательно не всей области видимости функции `foo()`.
Точно так же `c` принадлежит только циклу `while`. Блочная область видимости
очень полезна для управления областями ваших переменных более точно, что
может сделать ваш код более легким в обслуживании в долгосрочной
перспективе.
**Примечание:** Более детальная информация об области видимости есть в
книге *Область видимости и замыкания* этой серии. См. книгу *ES6 и за его
пределами* этой серии, чтобы узнать больше о блочной области видимости `let`.

Download 424.95 Kb.

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




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