zakres odnosi się do dostępności zmiennych i funkcji w niektórych częściach kodu.
w JavaScript zmienna ma dwa typy zakresu:
- Globalny zakres
- lokalny zakres
Globalny zakres
zmienna zadeklarowana na górze programu lub poza funkcją jest uważana za globalną zmienną zakresu.
zobaczmy przykład globalnej zmiennej zakresu.
// program to print a text let a = "hello";function greet () { console.log(a);}greet(); // hello
w powyższym programie zmienna a jest zadeklarowana na górze programu i jest zmienną globalną. Oznacza to, że zmienna a
może być użyta w dowolnym miejscu programu.
wartość zmiennej globalnej może być zmieniana wewnątrz funkcji. Na przykład
// program to show the change in global variablelet a = "hello";function greet() { a = 3;}// before the function callconsole.log(a);//after the function callgreet();console.log(a); // 3
w powyższym programie zmienna a jest zmienną globalną. Wartość a to hello. Następnie zmienna a jest dostępna wewnątrz funkcji, a wartość zmienia się na 3.
stąd wartość a zmienia się po zmianie jej wewnątrz funkcji.
Uwaga: Dobrą praktyką jest unikanie używania zmiennych globalnych, ponieważ wartość zmiennej globalnej może się zmieniać w różnych obszarach programu. Może wprowadzić nieznane wyniki w programie.
w JavaScript zmienna może być również używana bez deklarowania jej. Jeśli zmienna jest używana bez deklarowania jej, zmienna ta automatycznie staje się zmienną globalną.
na przykład
function greet() { a = "hello"}greet();console.log(a); // hello
w powyższym programie zmienna a jest zmienną globalną.
jeśli zmienna została zadeklarowana za pomocąlet a = "hello"
, program wyrzuciłby błąd.
Uwaga: W języku JavaScript istnieje "strict mode";
, w którym nie można użyć zmiennej bez jej zadeklarowania. Aby dowiedzieć się więcej o strict, odwiedź JavaScript Strict.
zakres lokalny
zmienna może również mieć zasięg lokalny, tzn. może być dostępna tylko w ramach funkcji.
przykład 1: zmienna zakresu lokalnego
// program showing local scope of a variablelet a = "hello";function greet() { let b = "World" console.log(a + b);}greet();console.log(a + b); // error
Wyjście
helloWorldUncaught ReferenceError: b is not defined
w powyższym programie zmienna a jest zmienną globalną, a zmienna b jest zmienną lokalną. Do zmiennej b można uzyskać dostęp tylko wewnątrz funkcji greet. Dlatego, gdy próbujemy uzyskać dostęp do zmiennej B poza funkcją, pojawia się błąd.
let to block Scoped
let
słowo kluczowe jest block-scoped (zmienna może być dostępna tylko w bezpośrednim bloku).
przykład 2: zmienna o zasięgu blokowym
// program showing block-scoped concept// global variablelet a = 'Hello';function greet() { // local variable let b = 'World'; console.log(a + ' ' + b); if (b == 'World') { // block-scoped variable let c = 'hello'; console.log(a + ' ' + b + ' ' + c); } // variable x cannot be accessed here console.log(a + ' ' + b + ' ' + c);}greet();
Wyjście
Hello WorldHello World helloUncaught ReferenceError: x is not defined
w powyższym programie zmienna
- a jest zmienną globalną. Można go uzyskać w dowolnym miejscu w programie.
- b jest zmienną lokalną. Dostęp do niej jest możliwy tylko wewnątrz funkcji
greet
. - C jest zmienną o zasięgu bloku. Dostęp do niego można uzyskać tylko wewnątrz bloku instrukcji
if
.
stąd w powyższym programie dwa pierwszeconsole.log()
działają bez żadnych problemów.
jednak staramy się uzyskać dostęp do zmiennej c o zasięgu bloku poza blokiem w trzecim console.log()
. Spowoduje to błąd.
Uwaga: w JavaScript,var
jest scoped funkcji ilet
jest scoped bloku. Jeśli spróbujesz użyćvar c = 'hello';
wewnątrz instrukcjiif
w powyższym programie, cały program działa, ponieważ c jest traktowane jako zmienna lokalna.
aby dowiedzieć się więcej o let
versus var
, odwiedź Stronę JavaScript let vs var.