Sobes.tech
Junior

Co je to rozsah v JavaScriptu?

sobes.tech AI

Odpověď od AI

Rozsah (Scope) v JavaScriptu je kontext, ve kterém jsou definovány a dostupné proměnné a funkce.

Jednoduše řečeno, určuje, kde v kódu lze odkazovat na proměnnou nebo funkci.

Existuje několik typů rozsahů:

  • Globální rozsah (Global Scope): Proměnné deklarované mimo jakoukoli funkci jsou v globálním rozsahu. Jsou dostupné odkudkoli v kódu.
    // Globální proměnná
    let globalVar = "Viditelný všude";
    
    function showGlobal() {
      console.log(globalVar); // Dostupné uvnitř funkce
    }
    
    showGlobal();
    
  • Lokální (funkční) rozsah (Local/Function Scope): Proměnné deklarované uvnitř funkce jsou v lokálním rozsahu této funkce. Jsou dostupné pouze uvnitř této funkce a v jejích vnořených funkcích, ale ne zvenčí.
    function showLocal() {
      // Lokální proměnná
      let localVar = "Vidím jen tady";
      console.log(localVar);
    }
    
    showLocal();
    // console.log(localVar); // Chyba: localVar není definována
    
  • Blokový rozsah (Block Scope): Zavedený v ES6 (ES2015) s let a const. Proměnné deklarované pomocí let nebo const uvnitř složených závorek ({}), například v blocích kódu, cyklech nebo podmínkách, mají blokový rozsah. Proměnné deklarované pomocí var nemají blokový rozsah.
    if (true) {
      // Proměnná s blokovým rozsahem
      let blockVar = "Viditelná pouze v tomto bloku";
      console.log(blockVar);
    }
    
    // console.log(blockVar); // Chyba: blockVar není definována
    
    for (let i = 0; i < 2; i++) {
      // Proměnná s blokovým rozsahem v cyklu
      console.log(i);
    }
    
    // console.log(i); // Chyba: i není definována (pokud bylo použito let)
    

Je také důležité pochopit koncept Scope Chain (řetězec rozsahů). Když JavaScript hledá hodnotu proměnné, nejprve prohledá aktuální rozsah. Pokud ji nenajde, přejde do vnějšího (rodičovského) rozsahu a tak dále, až do globálního rozsahu. Pokud proměnnou nenajde nikde, vyhodí chybu ReferenceError.