Junior
Čo je to rozsah v JavaScript?
sobes.tech AI
Odpoveď od AI
Rozsah platnosti (Scope) v JavaScripte je kontext, v ktorom sú definované a dostupné premenné a funkcie.
Jednoducho povedané, určuje, kde je možné odkazovať na premennú alebo funkciu v kóde.
Existuje niekoľko typov rozsahov platnosti:
- Globálny rozsah platnosti (Global Scope): Premenné, ktoré sú deklarované mimo akýchkoľvek funkcií, sa nachádzajú v globálnom rozsahu platnosti. Sú dostupné z akéhokoľvek miesta v kóde.
// Globálna premenná let globalVar = "Som viditeľný všade"; function showGlobal() { console.log(globalVar); // Dostupné vo funkcii } showGlobal(); - Lokálny (funkčný) rozsah platnosti (Local/Function Scope): Premenné, ktoré sú deklarované vo vnútri funkcie, sa nachádzajú v lokálnom rozsahu tejto funkcie. Sú dostupné iba v tejto funkcii a jej vnorených funkciách, ale nie zvonku.
function showLocal() { // Lokálna premenná let localVar = "Som viditeľný iba tu"; console.log(localVar); } showLocal(); // console.log(localVar); // Chyba: localVar nie je definovaná - Blokový rozsah platnosti (Block Scope): Objavil sa s ES6 (ES2015) s zavedením
letaconst. Premenné deklarované pomocouletaleboconstvnútri zložených zátvoriek ({}), či už ide o bloky kódu, slučky alebo podmienky, majú blokový rozsah platnosti. Premenné deklarované pomocouvarnemajú blokový rozsah platnosti.if (true) { // Premenná s blokovým rozsahom let blockVar = "Som viditeľný iba v tomto bloku"; console.log(blockVar); } // console.log(blockVar); // Chyba: blockVar nie je definovaná for (let i = 0; i < 2; i++) { // Premenná s blokovým rozsahom v slučke console.log(i); } // console.log(i); // Chyba: i nie je definované (ak bol použitý let)
Dôležité je tiež pochopiť koncept reťazca rozsahov platnosti (Scope Chain). Keď JavaScript sa snaží nájsť hodnotu premennej, najskôr sa pozrie do aktuálneho rozsahu platnosti. Ak tam premenná nie je nájdená, prejde do vonkajšieho (rodičovského) rozsahu platnosti a tak ďalej, až po globálny rozsah platnosti. Ak premenná nie je nájdená ani v globálnom rozsahu platnosti, vyhodí sa chyba ReferenceError.