Sobes.tech
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 let a const. Premenné deklarované pomocou let alebo const vnútri zložených zátvoriek ({}), či už ide o bloky kódu, slučky alebo podmienky, majú blokový rozsah platnosti. Premenné deklarované pomocou var nemajú 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.