V tomto výučbe sa pomocou príkladov dozviete o variabilnom rozsahu v JavaScripte.
Rozsah sa týka dostupnosti premenných a funkcií v určitých častiach kódu.
V jazyku JavaScript má premenná dva typy rozsahu:
- Globálny rozsah
- Miestny rozsah pôsobnosti
Globálny rozsah
Premenná deklarovaná v hornej časti programu alebo mimo funkcie sa považuje za premennú globálneho rozsahu.
Pozrime sa na príklad premennej globálneho rozsahu.
// program to print a text let a = "hello"; function greet () ( console.log(a); ) greet(); // hello
Vo vyššie uvedenom programe je premenná a deklarovaná v hornej časti programu a je globálnou premennou. To znamená, že premennú a
je možné použiť kdekoľvek v programe.
Hodnotu globálnej premennej je možné vo vnútri funkcie zmeniť. Napríklad,
// 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
Vo vyššie uvedenom programe je premenná a globálnou premennou. Hodnota a je ahoj. Potom sa k premennej a pristupuje vo vnútri funkcie a hodnota sa zmení na 3.
Preto sa hodnota zmien zmení po zmene vo vnútri funkcie.
Poznámka : Je dobrým zvykom vyhnúť sa používaniu globálnych premenných, pretože hodnota globálnej premennej sa môže v rôznych oblastiach programu meniť. Môže zaviesť do programu neznáme výsledky.
V JavaScripte možno premennú použiť aj bez jej deklarovania. Ak sa použije premenná bez jej deklarovania, táto premenná sa automaticky stane globálnou premennou.
Napríklad,
function greet() ( a = "hello" ) greet(); console.log(a); // hello
Vo vyššie uvedenom programe je premenná a globálnou premennou.
Ak bola premenná deklarovaná pomocou let a = "hello"
, program by spôsobil chybu.
Poznámka : V JavaScripte existuje "strict mode";
premenná, ktorá nemôže byť použitá bez jej deklarovania. Ak sa chcete dozvedieť viac informácií o prísnych, navštívte JavaScript Prísne.
Miestny rozsah pôsobnosti
Premenná môže mať tiež lokálny rozsah, tj je k nej možné pristupovať iba v rámci funkcie.
Príklad 1: Premenná miestneho rozsahu
// 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
Výkon
helloWorld Uncaught ReferenceError: b nie je definované
Vo vyššie uvedenom programe je premenná a globálnou premennou a premenná b lokálnou premennou. Premenná b je prístupná iba vo vnútri funkcie pozdrav. Preto sa pri pokuse o prístup k premennej b mimo funkcie vyskytne chyba.
nech je Block Scoped
let
Kľúčové slovo je blok rozsahom (premennú možno pristupovať iba v bezprostrednej bloku).
Príklad 2: Bloková premenná
// 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();
Výkon
Hello World Hello World ahoj Uncaught ReferenceError: x nie je definované
Vo vyššie uvedenom programe premenná
- a je globálna premenná. Je k nim prístup kdekoľvek v programe.
- b je lokálna premenná. Je k nim prístup iba vo vnútri funkcie
greet
. - c je premenná s blokovaným rozsahom. Je prístupný iba vo vnútri
if
bloku príkazov.
Vo vyššie uvedenom programe teda prvé dva console.log()
fungujú bez problémov.
Pokúšame sa však získať prístup k blokovanej premennej c mimo bloku v tretej console.log()
. To spôsobí chybu.
Poznámka : V JavaScripte var
je rozsah funkcie obmedzený na rozsah funkcií let
. Ak sa pokúsite použiť var c = 'hello';
vo vnútri if
príkazu vo vyššie uvedenom programe, funguje celý program, pretože s parametrom c sa zaobchádza ako s lokálnou premennou.
Ak sa chcete dozvedieť viac informácií o let
verzus var
, navštívte JavaScript let vs. var.