Sobes.tech
Junior

V čom spočíva rozdiel medzi uzáverom a rozsahom?

sobes.tech AI

Odpoveď od AI

Uzávere je funkcia, ktorá si pamätá prostredie (lexikálnu oblasť viditeľnosti), v ktorom bola vytvorená, aj keď sa vykonáva mimo tejto oblasti. To jej umožňuje pristupovať k premenným z rodičovskej oblasti viditeľnosti.

Oblasť viditeľnosti — to je oblasť programu, v ktorej je viditeľná určitá premenná alebo funkcia a ku ktorej je možné získať prístup. V JavaScripte existujú globálna, funkčná a bloková oblasť viditeľnosti.

Hlavný rozdiel:

  • Oblasť viditeľnosti určuje, kde je premenná alebo funkcia dostupná počas kompilácie (alebo parsovania).
  • Uzávierka umožňuje funkcii zachovať prístup k premenným zo svojej oblasti viditeľnosti po tom, čo táto oblasť ukončila vykonávanie.

Príklad oblasti viditeľnosti:

// Globálna oblasť viditeľnosti
let globalVar = "Ja som globálna";

function myFunction() {
  // Funkčná oblasť viditeľnosti
  let functionVar = "Ja som funkčná";
  console.log(globalVar); // Dostupné
}

// console.log(functionVar); // Chyba ReferenceError: functionVar nie je definovaná

Príklad uzávierky:

function createCounter() {
  let count = 0; // Premenná v oblasti viditeľnosti createCounter

  return function() { // Toto je uzávierka
    count++; // Má prístup k count z rodičovskej oblasti viditeľnosti
    console.log(count);
  };
}

const counter = createCounter();
counter(); // Vypíše 1 (hodnota count sa zachováva)
counter(); // Vypíše 2 (hodnota count sa zachováva)
// console.log(count); // Chyba ReferenceError: count nie je definovaná

V tomto príklade vnútorná funkcia (uzávierka) zachováva prístup k premennej count, aj po tom, čo createCounter ukončila vykonávanie. To je možné vďaka uzávierke.

Porovnanie:

Charakteristika Oblasť viditeľnosti Uzávierka
Čo určuje Kde sú premenlivé a funkcie dostupné Spôsob, akým funkcia zachováva prístup k premenlivým z rodičovskej oblasti viditeľnosti
Kedy je aktívne Počas kompilácie (lexikálne prostredie) Počas vykonávania funkcie, vytvorenej v inej oblasti viditeľnosti
Väzba Uzávierka závisí od oblasti viditeľnosti, v ktorej bola vytvorená Oblasť viditeľnosti — to je fundamentálny pojem pre určenie dostupnosti