Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
JavascriptClosuresavagy Lezárásokkészítette: Schneidhoffer Dávid<br />
Példa kód #1vágjunk a közepébe!<br />// A dokumentum bármely pontjáról elérhető<br />var globalis_valtozo= ‘Action speak’;...
Mi ebben az érdekes?<br />Az „A” függvény már befejezte futását, de a „B” függvény továbbra is hivatkozik az A függvény eg...
Példa kód #2<br />// Szorzás, példa kód<br />function szorzas(x) {<br />// A kapott értéket összeszorzom a már definiáltta...
Mit csináltam?<br />Létrehoztam egy szorzas nevű függvényt, aminek 1 bemeneti paramétere van. A visszatérési értéke egy fü...
Tudtad-e? és Zárszó.<br />Egymásba ágyazott függvények esetén lezárást használsz.<br />Ilyenkor a belső függvény referenci...
Upcoming SlideShare
Loading in …5
×

Javascript Closures

880 views

Published on

Title: Javascript Closures
Lang: Hungarian
Created: Schneidhoffer David

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Javascript Closures

  1. 1. JavascriptClosuresavagy Lezárásokkészítette: Schneidhoffer Dávid<br />
  2. 2. Példa kód #1vágjunk a közepébe!<br />// A dokumentum bármely pontjáról elérhető<br />var globalis_valtozo= ‘Action speak’; <br />function A() {<br />// függvényen belüli helyi változó<br /> var a_helyi = ‘louder’;<br />function B() {<br /> var b_helyi = ‘thanwords’;<br />alert(globalis_valtozo +" "+ a_helyi +" "+ b_helyi);<br /> }<br />// Visszaadjuk referenciaként<br />return B;<br />}<br />// Példa kód futtatása<br />var pelda_kod = A();<br />pelda_kod();<br />
  3. 3. Mi ebben az érdekes?<br />Az „A” függvény már befejezte futását, de a „B” függvény továbbra is hivatkozik az A függvény egyik változójára (futási környezetére).<br />Closure szemléltetése – a külső függvény visszaadja a belső függvényt, ami továbbra is élvezi a külső függvény hatókörét<br />A külső függvény (A) végrehajtási kontextusa a függvény futásának befejezése után sem szűnik, mivel a benne létrehozott belső függvény (B) továbbra is hivatkozik rá. Ezt nevezzük lezárásnak (closure). Ez annyit jelent, hogy egy belső függvényből mindig elérhetők a külső függvény változói, még akkor is, ha a külső függvény már lefutott. <br />
  4. 4. Példa kód #2<br />// Szorzás, példa kód<br />function szorzas(x) {<br />// A kapott értéket összeszorzom a már definiálttal<br />return function(y) {<br />return x * y;<br />};<br />}<br />// Definiálok pár változót, 2-vel és 5-el való szorzáshoz<br />varszorzas2 = szorzas(2);<br />varszorzas5 = szorzas(5);<br />// Példa kód futtatása<br />alert(szorzas2(5));// 10<br />alert(szorzas5(5));// 25<br />
  5. 5. Mit csináltam?<br />Létrehoztam egy szorzas nevű függvényt, aminek 1 bemeneti paramétere van. A visszatérési értéke egy függvény.<br />Ez a függvény szintén 1 bemeneti paramétert vár. Visszatéréskor a már meglévő 2 paraméter szorzatát adja vissza.<br />A szorzas egy gyártó függvény (FactoryMethod). Az ehhez hasonló függvények feladata létrehozni vagyis „legyártani” egy másik függvényt.<br />Az előző példa alapján kétszer is ezt használtuk, hogy létrehozzuk a 2-vel és 5-tel való szorzó függvényeinket (szorzas2() és szorzas5()).<br />Használata egyszerű: A létrehozott szorzas2()-nek egy tetszőleges szám paramétert kell megadni és máris beszorozza 2-vel. <br />
  6. 6. Tudtad-e? és Zárszó.<br />Egymásba ágyazott függvények esetén lezárást használsz.<br />Ilyenkor a belső függvény referencián keresztül hivatkozik a külső függvény változóira. <br />Függvényen belüli eval()használatakor lezárást használsz.<br />Forrás anyagok, bővebb információk a témában magyarul: <br />Szabó Attila - Javascript HardCore<br />http://javascript.w3net.eu/closure.htm<br />Angol nyelven:<br />http://www.jibbering.com/faq/faq_notes/closures.html#clClose<br />https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Closures<br />Továbbiérdekespéldakódok:<br />http://blog.morrisjohns.com/javascript_closures_for_dummies.html<br />A prezentációt készítette: Schneidhoffer Dávid<br />Email: david.schneidhoffer@gmail.com<br />

×