V tej vadnici boste s pomočjo primerov spoznali spremenljiv obseg v JavaScript.
Obseg se nanaša na razpoložljivost spremenljivk in funkcij v določenih delih kode.
V JavaScript ima spremenljivka dve vrsti obsega:
- Globalni obseg
- Lokalni obseg
Globalni obseg
Spremenljivka, deklarirana na vrhu programa ali zunaj funkcije, se šteje za spremenljivko globalnega obsega.
Poglejmo primer spremenljivke globalnega obsega.
// program to print a text let a = "hello"; function greet () ( console.log(a); ) greet(); // hello
V zgornjem programu je spremenljivka a navedena na vrhu programa in je globalna spremenljivka. To pomeni, da je spremenljivko a
mogoče uporabiti kjer koli v programu.
Vrednost globalne spremenljivke je mogoče spremeniti znotraj funkcije. Na primer
// program to show the change in global variable let a = "hello"; function greet() ( a = 3; ) // before the function call console.log(a); //after the function call greet(); console.log(a); // 3
V zgornjem programu je spremenljivka a globalna spremenljivka. Vrednost a je zdravo. Nato se v funkciji dostopa do spremenljivke a in vrednost se spremeni na 3.
Zato se vrednost spremembe spremeni po spremembi znotraj funkcije.
Opomba : Dobra praksa je, da se izogibate uporabi globalnih spremenljivk, ker se lahko vrednost globalne spremenljivke spreminja na različnih področjih programa. V program lahko vnese neznane rezultate.
V JavaScript lahko spremenljivko uporabljate tudi, ne da bi jo prijavili. Če spremenljivko uporabimo, ne da bi jo prijavili, ta spremenljivka samodejno postane globalna spremenljivka.
Na primer
function greet() ( a = "hello" ) greet(); console.log(a); // hello
V zgornjem programu je spremenljivka a globalna spremenljivka.
Če bi bila spremenljivka razglašena z uporabo let a = "hello"
, bi program povzročil napako.
Opomba : V JavaScript obstaja "strict mode";
spremenljivka, ki je ni mogoče uporabiti, ne da bi jo prijavili. Če želite izvedeti več o strogem, obiščite JavaScript Strict.
Lokalni obseg
Spremenljivka ima lahko tudi lokalni obseg, tj. Do nje lahko dostopate samo znotraj funkcije.
Primer 1: Spremenljivka lokalnega obsega
// program showing local scope of a variable let a = "hello"; function greet() ( let b = "World" console.log(a + b); ) greet(); console.log(a + b); // error
Izhod
helloWorld Uncaught ReferenceError: b ni definiran
V zgornjem programu je spremenljivka a globalna spremenljivka, spremenljivka b pa lokalna spremenljivka. Do spremenljivke b lahko dostopate samo znotraj funkcije pozdrav. Ko torej poskusimo dostopati do spremenljivke b zunaj funkcije, pride do napake.
dovoljeno je Block Scoped
Ključna let
beseda ima obseg blokov (spremenljivka je dostopna samo v neposrednem bloku).
Primer 2: spremenljivka z obsegom bloka
// program showing block-scoped concept // global variable let 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();
Izhod
Hello World Hello World hello Uncaught ReferenceError: x ni definiran
V zgornjem programu spremenljivka
- a je globalna spremenljivka. Do njega lahko dostopate kjer koli v programu.
- b je lokalna spremenljivka. Do njega lahko dostopate samo znotraj funkcije
greet
. - c je spremenljivka z obsegom. Do njega je mogoče dostopati samo znotraj
if
bloka stavkov.
Tako v zgornjem programu prva dva console.log()
delujeta brez težav.
Vendar v tretji poskušamo dostopati do spremenljivke c z obsegom bloka c zunaj bloka console.log()
. To bo povzročilo napako.
Opomba : V JavaScript var
je obseg funkcije in obseg let
bloka. Če poskušate uporabiti var c = 'hello';
znotraj if
izjave v zgornjem programu, celoten program dela, kot je c obravnava kot lokalne spremenljivke.
Če želite izvedeti več o let
primerjavi var
, obiščite JavaScript let vs var.