Lezárások - javascript, MDN

Circuit - ez a funkció a linket a független (szabad) változók. Más szóval, a függvény a lezárás, „emlékszik” a környezetet, amelyben azt létrehozták.

lexikális hatálya

Tekintsük a következő példát:

init () függvény létrehoz egy helyi változó neve. majd felhívja displayName () függvény. displayName () - ez egy belső funkciója - ez határozza meg az init (), és csak a testen belül a függvény. Ellentétben az init (). displayName () nem rendelkezik a helyi változókat, és helyette egy változó nevét. Bizonyos funkciók a szülő.

Tekintsük a következő példát:

A legegyszerűbb esetben a lokális változók a függvény létezik csak az időben annak végrehajtását. Miután felhívta makeFunc () lehet számítani, hogy a változó neve többé nem lesz elérhető. Ez nyilvánvalóan nem igaz bezárását.

A megoldás erre a puzzle vált myfunc bezárását. Circuit - egy speciális fajtája az objektum, amely egyesíti a két dolgot: a funkció és a környezet, amelyben a függvény létrejött. Beállítása tagja egyetlen helyi változó, ami körébe tartozó feladatok idején létrehozása áramkört. Ebben az esetben a myfunc - ez az áramkör, amely displayName funkciót. és a húr „Mozilla”, amely létezett létrehozása során áramkört.

Itt egy érdekes példa - makeAdder funkció:

Itt már azonosított makeAdder (x) függvény. amely fogadja x. és visszatér egy új funkciót. Ez a függvény y. és visszatér az összeget az x és y.

Lényegében ez a gyár makeAdder funkció - létrehoz egy olyan függvény, ami a hozzá adott értéket érveit. A fenti példában mi használja a gyári funkció, hogy két új funkciót - az egyik meghatározza érvként, hogy értéke 5, a második - 10.

add5 és add10 - ezek csak példák az áramköröket. A test a funkciója ugyanaz, de megtartják különböző környezetekben. Körülvett add5 X funkció - egy 5, míg körül add10 x - 10.

Lezárások a gyakorlatban

Ez mind jó, de amennyire áramkör hasznos a gyakorlatban? Lássuk, mit lehet csinálni velük. Általában a lezárás lehetővé teszi, hogy a társult néhány adat (egy adott környezetben) egy függvény, amely együttműködik ezekkel az adatokkal. Nyilvánvaló párhuzamot objektumorientált programozási, olyan objektum, amely lehetővé teszi számunkra, hogy kapcsolódnak az adathalmaz (objektum tulajdonságai) egy vagy több módszerrel.

Azaz, az áramkör bárhol használható, ahol lenne a normális és helyes használata egy tárgy egyetlen módszer.

Nézzünk egy gyakorlati példát: Tegyük fel, hogy szeretnénk felvenni az oldalt egy pár gomb, ami megváltoztatja a szöveg méretét. Alternatív megoldásként, akkor adja meg a font-size tulajdonság a test elem pixel, majd állítsa be a méretet a többi oldal elemeit (például címeket, például) a relatív egységek em:

Akkor a gombokat fogja változtatni a font-size tulajdonság a test elem, és a többi elem az oldal, csak hogy vegye fel az új értéket és méretezése a szöveg méretét segítségével relatív egységekben.

Most size12. size14. és size16 - függvények, amelyek megváltoztatják a szöveg méretét a szervezetben tag értékek 12, 14, és 16 képpont, ill. Ezt követően, ragaszkodunk ezeket a funkciókat a gombok, mint ez:

Egyéni módszerek Emulate keresztül áramkörök

Nyelvek, mint a Java lehetővé teszi számunkra, hogy állapítsa meg a metódusokat. Ez az, amikor akkor csak más módszerekkel az azonos osztályba, de nem kívülről hozzáférhető.

Itt van, hogyan lehet leírni áramkörök segítségével számos nyilvános módszereket használhatják a privát módszerek és változók. Ez a stílus a programozás is nevezik a modul mintát. fordítás állandó mindig nincs, de használható a keresett szót „modul”, „sablon” és a „Javacript”:

Van egy csomó dolog megváltozott. Az előző példában minden egyes áramköri volt saját végrehajtási környezetet (a környezet). Itt hozzon létre egy egységes környezetet három funkciót: Counter.increment. Counter.decrement. és Counter.value.

Egy környezet jön létre a szervezetben egy névtelen függvényt, amely végre a közzététel idején. Ez a környezet egy privát két elemből áll: a változó és privateCounter fuktsii changeBy. Egyik ilyen elemek-ről közvetlenül kívül a névtelen függvényt is. Ehelyett lehet és kell használni három nyilvános függvény, amely visszaadja egy névtelen kódblokkba (anonim wrapper), végrehajtható ugyanabban névtelen függvényt.

Megjegyzés leírjuk egy névtelen függvényt a kereslet, amely létrehozza a számláló, majd futtassa hozzárendeljük az eredménye a végrehajtás a változó Counter. De azt is tudja futtatni ezt a funkciót egyszerre, és tartsa egy külön változót kell használnia, hogy további létrehozásának néhány méterre, mint ez:

Megjegyezzük, hogy a számláló működik egymástól függetlenül. Ez azért van, mert mindegyik idején a funkció makeCounter () létrejött egy külön végrehajtási környezetet (a környezet). Ez egy privát változó privateCounter minden számláló valójában egy külön független változó.

A kör ezen a módon, akkor kap egy sor előnnyel jár általában együtt járó objektumorientált programozás, mint a szigetelés és a beágyazás.

Létrehozása lezárások a ciklusban: Egy nagyon gyakori hiba.

Mielőtt verzió ECMAScript 6 belépett a kulcsszó hagyja. Folyamatosan következő problémák merülnek fel, amikor létrehozza áramkörök a cikluson belül. Tekintsük a következő példát:

Array helpText ismerteti három tipp a három beviteli mezők. A ciklus végigfut a leírások a sorból, és az egyes beviteli mezők meghatározza, hogy amikor egy esemény bekövetkezik onfocus ezt az elemet kell hívni függvényében mutatja a megfelelő prompt.

Ha ezt a kódot, akkor láthatjuk, hogy ez nem úgy működik, ahogy szerettük volna. Melyik mezőben nem választott, mint egy útmutató mindig meg fog jelenni egy üzenetet korban.

A probléma az, hogy a feladatokat, mind a onfocus eseménykezeléshez, a lezárások. Ezek közé tartozik a leírást a funkció és a végrehajtási környezetet (környezet), az örökölt setupHelp funkciót. Ebből jött létre a három kör, de ezeket az ugyanarra végrehajtási környezetet (a környezet). Mire az esemény onfocus ciklusban már régóta teljesül, ezért a változó elem (ugyanaz mind a három körös) rámutat arra, hogy az utolsó elem a tömb, amely éppen az életkor terén.

A megoldás, ebben az esetben azt is feltételezhetjük, a funkciók használatának, gyári funkció (funkció gyári), amint azt a fentiekben ismertettük, a példákban:

Itt működik, ahogy kellene. Ahelyett, hogy a szimpla környezetet egyáltalán, makeHelpCallback függvény létrehozza az egyes lezárások a saját, amelyben a változó pont a megfelelő elemet helpText tömböt.

Szempontok a teljesítmény

Nem kell, anélkül, hogy hozzon létre egy függvényt egy függvényen belül, amennyiben az áramkör nincs szükség. Ezzel a technikával növeli a teljesítményt követelmények mind a sebesség, mind a memória-felhasználás.

Példaként amikor új objektumot / osztály, akkor van értelme, hogy az összes módszer a prototípus a tárgy, hanem azokat leírni szöveges tervezők. Az a tény, hogy ha másképpen, minden alkalommal, amikor egy objektum jön létre ez létre fog hozni egy példányát minden egyes módszer helyett örökli azokat a prototípus.

Nézzük nem túl praktikus, de beszédes példája:

Mivel a fenti kód nem kihasználni áramkörök lehet újraírni az alábbiak szerint:

Módszerek szállított egy prototípus. Azonban felülírják a prototípus - önmagában egy rossz szokás, úgyhogy átírni úgy, hogy új módszereket egyszerűen hozzáadjuk a meglévő prototípus.

A fenti kód lehet tenni pontosabban, így ugyanazt az eredményt:

Köszönjük! Kérjük, ellenőrizze a mappát „Beérkezett üzenetek”, hogy erősítse meg az előfizetést.

Ha korábban nem erősítette meg az előfizetés a hírlevél a Mozilla, akkor meg kell csinálni. Kérjük, ellenőrizze a postaládájába, vagy spam a postafiók látni, hogy ez nem volt egy levél tőlünk.

Elrejtése a hírlevelet

Miért MDN másképp néz ki?

MDN változik, mely kizárólag a dokumentációt webes technológiákat. Mindegy nagy tartalmat, hogy itt maradjon; mi változás csak a vizuális elemek és a navigációs segítségével gyorsan megtalálja a dokumentációt az internetes technológiát.

De ne aggódj, MDN és a Mozilla még mindig együtt. Sőt, mi frissíteni csak a design MDN többször, hogy megfeleljenek az új logó és színek Mozilla.

Bővebben az újratervezés a poszt a blogunkon. Köszönjük, hogy a MDN!

Hide üzenetet az újratervezés

Kapcsolódó cikkek