Vnořené jmenné prostory

AndreaAndrea

V JavaScriptu, stejně jako v mnoha jiných programovacích jazycích, existuje koncept jmenného prostoru. Toto je klíčový koncept, který pomáhá izolovat bloky kódu od sebe, což vede k čistšímu, organizovanějšímu kódu, který je méně náchylná k chybám.

Jmenným prostorem myslíme oblast kódu, ve které jsou definovaná určité proměnné a funkce. Vnořené jmenné prostory se můžou zanořovat a tím pádem mají hierarchickou strukturu. Tím se myslí to,že je blok kódu zanořen do jiného bloku kódu a dochází ke vzniku zanořeného jmenného prostoru. Pro práci na větších projektech je nutná znalost používání této techniky, protože má vliv na to, jakým způsobem organizujeme bloky kódu do snadno udržovatelných skupin, které sdílí určitá data a jsou jednoznačně identifikovatelné. Také tento přístup dokáže zabránit mnoha konfliktům mezi proměnnými a funkcemi a zajišťuje se bezpečnější a čistší kód.

Vytvoření blokového prostoru (scope)

S podporou ES6 a klíčovými slovy let a const vznikla podpora blokového scope Tento scope se vytváří každým blokem kódu, který je ohraničen složenými závorkami {}, jako jsou funkce, cykly nebo podmínky.

Proměnné a funkce definované uvnitř zanořeného jmenného prostoru jsou lokální, což znamená, že jsou přístupné pouze uvnitř tohoto bloku. Proměnné definované uvnitř vnitřní funkce nejsou přístupné mimo tuto funkci, včetně vnější funkce, ve které je vnitřní funkce definována.

Vnitřní funkce tedy má přístup k proměnným ve svém vlastním lokálním scopu, stejně jako k proměnným v jakémkoliv nadřazeném (obklopujícím) scopu, až do globálního scopu. Tento princip se nazývá "lexikální scoping" nebo "statický scoping".

Často se vytváří nové paměťové prostory při volání funkce (nebo vstupu do bloku). Po jejím vykonání a návratu z funkce je tento paměťový prostor uvolněn.

Ukázka

const globalVar = "Jsem globální proměnná"; // Global scope

function outerFunction() {
  const outerVar = "I'm an outer variable"; // Local scope of outerFunction

  function innerFunction() {
    const innerVar = "I'm an inner variable"; // Local scope of innerFunction

    console.log(globalVar); // Accessible
    console.log(outerVar); // Accessible
    console.log(innerVar); // Accessible
  }

  innerFunction();

  console.log(globalVar); // Accessible
  console.log(outerVar);

// Accessible
console.log(innerVar); // Not accessible, ReferenceError
}

outerFunction();

console.log(globalVar); // Accessible
console.log(outerVar); // Not accessible, ReferenceError
console.log(innerVar); // Not accessible, ReferenceError

Closure (uzávěra)

JavaScript podporuje uzávěry, což znamená, že vnitřní funkce si pamatuje svůj obor platnosti, i když jsou volány mimo svůj původní obor platnosti. Uzávěry jsou důležité pro vytváření soukromých proměnných, modulárního kódu a funkcí vyššího řádu.