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átni var kulccszóval definiált változókat, szóval kijjebb fogunk menni i-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ólsetTimeout-ról, és console.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:


Következő lecke  
Hozzászólások

2 hozzászólás