Funkció hatókör és blokk hatókör

Amikor egy változót egy függvényen belül deklarálsz, a változó a függvényen belül le van kötve, és a függvényen kívül nem tudsz hozzáférni hozzá. A var a kulcsszó, amellyel egy változót definiálhatunk függvényhatáron belüli elérhetőségre.

Most azt kérdezhetjük, ha a let vagy a const használata esetén is hibát ad, akkor miért csak a var kapcsolódik a függvényhatárhoz? Az a helyzet, hogy a let és a const a blokk hatókör meghatározására szolgál, és az ES6 előtt a JavaScriptnek nem volt blokk hatókör, illetve let és const.

A blokk hatókör a if, switch feltételeken vagy for és while ciklusokon belüli terület. Egyszerűen fogalmazva , valahányszor {szögletes zárójelben} látja, az egy blokk.

Lássunk egy példát:

Most azt várhatnánk, hogy egyik naplóparancs sem fog működni, de mint láthatjuk, ez nem így van a var esetében, a var-val definiált változók a if, switch feltételek vagy a for és while ciklusokon belül globálisan elérhetők és a globális hatókör részét képezik, ezért jobb gyakorlat a let és const használata velük.

Lexikai hatókör

Végre elérkeztünk a bejegyzés valódi céljához. Nos, kihagyhattam volna a terjedelem hosszú tárgyalását, de személy szerint nem hiszem, hogy a lexikai terjedelem megértéséhez ismernünk kell a körülötte forgó legfontosabb összetevőket.

Még egyszer egy megjegyzendő pont:

Egyszerű szavakkal ez azt jelenti, hogy a gyermek hatókör hozzáfér a szülő hatókörben definiált változókhoz. Ha például definiálnék egy függvényt, és azon belül deklarálnék egy változót, és ugyanezen függvényen belül definiálnék egy másik függvényt, akkor a lexikális hatókör miatt képesnek kellene lennem arra, hogy ezt a változót a belső függvényen belül használjam. Lássunk egy példát:

A példából látható, hogy a outerFunction()-ben deklarált változókat a innerfunction() segítségével érjük el, ez a lexikális scoping.

A változók hatókörét a kódban elfoglalt pozíciójuk határozza meg. A változók feloldásához a JavaScript a legbelső hatókörből indul, és addig keres kifelé, amíg meg nem találja a keresett változót. A fenti példában a Javascript először a innerFunction() belső tartományon belüli változókat keresi, és ha nem találja, akkor kívülre megy, azaz outerFunction()

A lineáris hatókör jobb, mert a kódból könnyen kideríthetjük egy változó értékét, míg a dinamikus hatókörben a változó jelentése futás közben változhat, ami bonyolulttá teszi a megértést.

Sikeresen megértettük tehát, hogy mi a lexikális scoping, most nézzük meg a lezárásokat, ahol a lexikális scopinget ténylegesen használják.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.