2.2. Hatókör (Scope): Miért aggódnék a hatókörökön?
Nézzünk is egy konkrét példát rá, hogy hogyan tud fejfájást okozni egy változó hatóköre.
A lenti kódrészletben számolni akarunk valamit, ehhez definiáltunk egy count
változót egy exampleFunction
függvény belsejében. A count
változónk hatóköre (scope-ja) ennek a függvénynek a belseje lesz. Ezért ha később szeretnénk használni a változónkat az exampleFunction
függvényen kívül, mondjuk hogy megnézzük, meddig jutottunk a számolással, sajnos egy hibaüzenetet fogunk kapni a megszámolt értékünk helyett. Ez azért történt, mert minden változó csak a saját hatókörén belül elérhető, azon kívül nem.
Mi van akkor, ha mégiscsak akarom használni a count
változómat az exampleFunction
függvényen kívül? Egy jó megoldás lehet, ha ehhez ezt a változót egyel kijjebb, egy külső hatókörben definiálom, az exampleFunction
-ön kívül. Így tudnánk a count
változót használni mind a példa függvényen belül, mind azon kívül, mert a belső, "gyermek" függvények hozzáférnek a külső, "szülő" hatókörök változóihoz. Kifelé látunk, csak befelé nem.
Az állásinterjún
Miután sikeresen elmesélted a hatókörök definícióját egy állásinterjún, a következő lépésben szembetalálhatod magad egy Trükkös Interjúfeladattal. Ez remekül leteszteli, hogy csak beszélni tudsz-e a scope-okról, vagy használni is tudod-e ezt a tudásod. Próbáljuk is ki ezt a következő kérdéssel.
Ezek kellenek majd a jó válaszhoz:
- Ciklusok. Lesz a feladatban egy
for
ciklus, ami megismétli a kód blokkját 4 körben, egyre növekvői
index értékekkel. setTimeout
. Lesz egy időzítő, ami végrehajtja a kapott függvényét, amikor lejár a várakozási ideje.- És persze a hatókörök. Meghívunk egy konzolra író
console.log
-ot egy függvény belsejéből. Ebben a hatókörben, ahol épp logolunk, nem látnivar
kulccszóval definiált változókat, szóval kijjebb fogunk mennii
-t keresni a külső hatókörben. Mit fogunk találni?
Megjegyzés: Most még visszalapozgathatsz, ha találsz olyan témát, amiben bizonytalan vagy. Az MDNen például biztosan találsz még információt ciklusokról,setTimeout
-ról, ésconsole.log
-ról. Plusz érdemes lefuttatnod a lenti kódrészletet válaszolás előtt, ehhez elő is készítettünk neked egy CodePent. Ezt a választ még nem kell kívülről tudnod, inkább próbálgass, és gondolkozz a miérteken!
Feladat
Futtasd le az alábbi kódrészletet, majd válaszolj a kérdésre:
2 hozzászólás