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 |