Function, scope és closure
JavaScript scope és closure vizuálisan: lexical environment, függvények, callbackek és hogyan őriz meg egy closure értékeket a létrehozási környezetéből.
Röviden
A scope meghatározza, hogy egy név a kód mely részéről érhető el. JavaScript lexical scope-ot használ: a láthatóságot alapvetően az határozza meg, hol írtad a függvényt, nem az, hogy honnan hívtad.
Mit jelent a function, scope és closure?
A scope meghatározza, hogy egy név a kód mely részéről érhető el. JavaScript lexical scope-ot használ: a láthatóságot alapvetően az határozza meg, hol írtad a függvényt, nem az, hogy honnan hívtad.
A lényeg vizuálisan
01
Block scope: `let` és `const` blokkon belül él.
02
Function declaration/expressions saját scope-ot hozhatnak létre.
03
Closure bindingot zár be, nem pillanatfelvételt készít minden esetben.
04
Túl sok fölöslegesen megtartott referencia memóriaélettartamot növelhet.
Hogyan működik a gyakorlatban?
Closure akkor jön létre, amikor egy függvény hozzáfér a külső lexical környezet bindingjaihoz, és ezt a kapcsolatot későbbi meghíváskor is megőrzi. Ez teszi lehetővé többek között factoryk, privát állapot és callback konfigurációk elegáns megoldását.
- Block scope: `let` és `const` blokkon belül él.
- Function declaration/expressions saját scope-ot hozhatnak létre.
- Closure bindingot zár be, nem pillanatfelvételt készít minden esetben.
- Túl sok fölöslegesen megtartott referencia memóriaélettartamot növelhet.
Closure
JavaScript
function makeCounter() {
let count = 0;
return () => ++count;
}
const next = makeCounter();
next(); // 1
next(); // 2Gyakorlati fejlesztői szemlélet
Callback bugnál vizsgáld meg, mely bindingot zárja be és mikor olvassa ki. Sok „régi érték” probléma valójában closure + state lifecycle megértési kérdés.
Gyakori hibák és félreértések
- Closure-t egyszerűen függvényen belüli függvényként definiálni.
- Dynamic scope-ot feltételezni hívási hely alapján.
- React stale closure jelenséget automatikusan framework bugnak tekinteni.
Források és szabványok
A technikai részletekhez elsődleges szabványokat és karbantartott hivatalos dokumentációt használok. Frameworkök, böngészők és webes API-k idővel változhatnak, ezért implementálás előtt mindig ellenőrizd az aktuális dokumentációt is.
Kapcsolódó ByBence Academy