Soumettre la recherche
Mettre en ligne
A closure szerepe a javascriptben
•
1 j'aime
•
1,154 vues
Máté Farkas
Suivre
Budapest.js 2010.03.30.
Lire moins
Lire la suite
Signaler
Partager
Signaler
Partager
1 sur 5
Recommandé
Portfolio
Portfolio
Saiduzzaman Shovon
Timeflex Presentation
Timeflex Presentation
Wilton Rooks
RTDA - pagamento de garantia nos acordos de bitributação
RTDA - pagamento de garantia nos acordos de bitributação
Ramon Tomazela
The csll and the substantive scope of brazilian tax treaties
The csll and the substantive scope of brazilian tax treaties
Ramon Tomazela
Box of colors
Box of colors
charisma_arts
Aula Básica - Identidade Visual
Aula Básica - Identidade Visual
Ana Luiza Freire
Listening comprehension pract
Listening comprehension pract
Vishal N. Lokhande
Group discussion
Group discussion
Vishal N. Lokhande
Recommandé
Portfolio
Portfolio
Saiduzzaman Shovon
Timeflex Presentation
Timeflex Presentation
Wilton Rooks
RTDA - pagamento de garantia nos acordos de bitributação
RTDA - pagamento de garantia nos acordos de bitributação
Ramon Tomazela
The csll and the substantive scope of brazilian tax treaties
The csll and the substantive scope of brazilian tax treaties
Ramon Tomazela
Box of colors
Box of colors
charisma_arts
Aula Básica - Identidade Visual
Aula Básica - Identidade Visual
Ana Luiza Freire
Listening comprehension pract
Listening comprehension pract
Vishal N. Lokhande
Group discussion
Group discussion
Vishal N. Lokhande
Notice for convening meeting (2)
Notice for convening meeting (2)
Vishal N. Lokhande
Listening comprehension pract (2)
Listening comprehension pract (2)
Vishal N. Lokhande
Os Contratos de Licença de Uso de Marca e a Imunidade de PIS e de COFINS sobr...
Os Contratos de Licença de Uso de Marca e a Imunidade de PIS e de COFINS sobr...
Ramon Tomazela
Andrew Ellis et al., Physica B, 385-386, (2006), 514 - 516.
Andrew Ellis et al., Physica B, 385-386, (2006), 514 - 516.
Duncan Gordon
George boas
George boas
Faz Teeyta
D.H. Gordon and S.N. Kukureka, Wear, 267, (2009) 669 - 678.
D.H. Gordon and S.N. Kukureka, Wear, 267, (2009) 669 - 678.
Duncan Gordon
Personal and professional correspondence pract (2)
Personal and professional correspondence pract (2)
Vishal N. Lokhande
The United Kingdom’ s Diverted Profits Tax and Tax Treaties: An Evaluation
The United Kingdom’ s Diverted Profits Tax and Tax Treaties: An Evaluation
Ramon Tomazela
Clase 6 controles de calidad en plantas medicinales
Clase 6 controles de calidad en plantas medicinales
IgorVillalta
La Globalización
La Globalización
Mercedes Díaz
2 programacion curricular - atencion de cabinas de internet y locutorios
2 programacion curricular - atencion de cabinas de internet y locutorios
Fernando Horna Palomino
La pobreza en el mundo subdesarrollado
La pobreza en el mundo subdesarrollado
Mercedes Díaz
Paradigmas Educativos
Paradigmas Educativos
Nancy Navas
Malayan union
Malayan union
Faz Teeyta
Object Oriented JavaScript
Object Oriented JavaScript
Máté Farkas
Osztályozzunk!
Osztályozzunk!
Máté Farkas
CSS előfeldolgozók
CSS előfeldolgozók
Máté Farkas
Dokumentáljunk, de hogyan?
Dokumentáljunk, de hogyan?
Máté Farkas
Git és/vagy Subversion
Git és/vagy Subversion
Máté Farkas
Egyszálú JavaScript
Egyszálú JavaScript
Máté Farkas
ECMAScript 5 Classes
ECMAScript 5 Classes
Máté Farkas
Use strict
Use strict
Máté Farkas
Contenu connexe
En vedette
Notice for convening meeting (2)
Notice for convening meeting (2)
Vishal N. Lokhande
Listening comprehension pract (2)
Listening comprehension pract (2)
Vishal N. Lokhande
Os Contratos de Licença de Uso de Marca e a Imunidade de PIS e de COFINS sobr...
Os Contratos de Licença de Uso de Marca e a Imunidade de PIS e de COFINS sobr...
Ramon Tomazela
Andrew Ellis et al., Physica B, 385-386, (2006), 514 - 516.
Andrew Ellis et al., Physica B, 385-386, (2006), 514 - 516.
Duncan Gordon
George boas
George boas
Faz Teeyta
D.H. Gordon and S.N. Kukureka, Wear, 267, (2009) 669 - 678.
D.H. Gordon and S.N. Kukureka, Wear, 267, (2009) 669 - 678.
Duncan Gordon
Personal and professional correspondence pract (2)
Personal and professional correspondence pract (2)
Vishal N. Lokhande
The United Kingdom’ s Diverted Profits Tax and Tax Treaties: An Evaluation
The United Kingdom’ s Diverted Profits Tax and Tax Treaties: An Evaluation
Ramon Tomazela
Clase 6 controles de calidad en plantas medicinales
Clase 6 controles de calidad en plantas medicinales
IgorVillalta
La Globalización
La Globalización
Mercedes Díaz
2 programacion curricular - atencion de cabinas de internet y locutorios
2 programacion curricular - atencion de cabinas de internet y locutorios
Fernando Horna Palomino
La pobreza en el mundo subdesarrollado
La pobreza en el mundo subdesarrollado
Mercedes Díaz
Paradigmas Educativos
Paradigmas Educativos
Nancy Navas
Malayan union
Malayan union
Faz Teeyta
En vedette
(14)
Notice for convening meeting (2)
Notice for convening meeting (2)
Listening comprehension pract (2)
Listening comprehension pract (2)
Os Contratos de Licença de Uso de Marca e a Imunidade de PIS e de COFINS sobr...
Os Contratos de Licença de Uso de Marca e a Imunidade de PIS e de COFINS sobr...
Andrew Ellis et al., Physica B, 385-386, (2006), 514 - 516.
Andrew Ellis et al., Physica B, 385-386, (2006), 514 - 516.
George boas
George boas
D.H. Gordon and S.N. Kukureka, Wear, 267, (2009) 669 - 678.
D.H. Gordon and S.N. Kukureka, Wear, 267, (2009) 669 - 678.
Personal and professional correspondence pract (2)
Personal and professional correspondence pract (2)
The United Kingdom’ s Diverted Profits Tax and Tax Treaties: An Evaluation
The United Kingdom’ s Diverted Profits Tax and Tax Treaties: An Evaluation
Clase 6 controles de calidad en plantas medicinales
Clase 6 controles de calidad en plantas medicinales
La Globalización
La Globalización
2 programacion curricular - atencion de cabinas de internet y locutorios
2 programacion curricular - atencion de cabinas de internet y locutorios
La pobreza en el mundo subdesarrollado
La pobreza en el mundo subdesarrollado
Paradigmas Educativos
Paradigmas Educativos
Malayan union
Malayan union
Plus de Máté Farkas
Object Oriented JavaScript
Object Oriented JavaScript
Máté Farkas
Osztályozzunk!
Osztályozzunk!
Máté Farkas
CSS előfeldolgozók
CSS előfeldolgozók
Máté Farkas
Dokumentáljunk, de hogyan?
Dokumentáljunk, de hogyan?
Máté Farkas
Git és/vagy Subversion
Git és/vagy Subversion
Máté Farkas
Egyszálú JavaScript
Egyszálú JavaScript
Máté Farkas
ECMAScript 5 Classes
ECMAScript 5 Classes
Máté Farkas
Use strict
Use strict
Máté Farkas
IEEE-754
IEEE-754
Máté Farkas
Automatikus pontosvessző beszúrás a JavaScriptben
Automatikus pontosvessző beszúrás a JavaScriptben
Máté Farkas
Többszálú javascript
Többszálú javascript
Máté Farkas
CSS előfeldolgozók
CSS előfeldolgozók
Máté Farkas
Plus de Máté Farkas
(12)
Object Oriented JavaScript
Object Oriented JavaScript
Osztályozzunk!
Osztályozzunk!
CSS előfeldolgozók
CSS előfeldolgozók
Dokumentáljunk, de hogyan?
Dokumentáljunk, de hogyan?
Git és/vagy Subversion
Git és/vagy Subversion
Egyszálú JavaScript
Egyszálú JavaScript
ECMAScript 5 Classes
ECMAScript 5 Classes
Use strict
Use strict
IEEE-754
IEEE-754
Automatikus pontosvessző beszúrás a JavaScriptben
Automatikus pontosvessző beszúrás a JavaScriptben
Többszálú javascript
Többszálú javascript
CSS előfeldolgozók
CSS előfeldolgozók
A closure szerepe a javascriptben
1.
Mi a closure?
A closure olyan objektum (függvény, tömb, stb), ami egy másik függvényen belül lett létrehozva és hivatkozik a létrehozó függvényben lévő némely változókra. Ezáltal a létrehozó függvény változói (scope-ja) a függvény futása után is elérhetőek maradnak, amíg csak szükséges. Gyakorlati alkalmazásait a következő diákon mutatom be. var szamlalo = (function() { A szamlalo egy függvényt kap var counter = 0; értékként, mikor a külső függvény return function() { return counter++; }; lefut. A benne létrehozott })(); counter változó életben marad, alert( szamlalo() + '->' + szamlalo() ); mert hivatkozunk rá a külső függvényből való kilépés után is. var pelda = function() { var variable = 40; Itt viszont nincs closure, mert var func = function() { return variable + 1 }; a pelda függvényből való return func() + 1; kilépés után semmilyen belső }; változóra nincs hivatkozás. alert(pelda()); 2010.03.30. – Budapest.js A closure szerepe a Javascriptben © FARKAS Máté – 1
2.
Adatrejtés, OOP var newObject
= function( step ) { var variable = 1; // "private" variable var change = function( diff ) { // "private" function variable += diff * step; }; return { // "public" functions get: function() { return variable; }, inc: function() { change(1); } }; }; var object = newObject( 2 ); object.inc(); alert( object.get() ); // 3 2010.03.30. – Budapest.js A closure szerepe a Javascriptben © FARKAS Máté – 2
3.
Callback függvények $('div').click(function() {
var $t = $(this); $t.fadeOut( function() { alert( $t.html() + ' or ' + computedVariable + '?'); }); $t.html('Nothing'); var computedVariable = 42; }); Kattintásra létrehozzuk a $t változót, elindítjuk az eltűnést, módosítjük a div tartalmát és létrehozunk egy újabb változót, ezzel a külső függvény futása véget ér. Az eltűnés végeztével kerül a vezérlés a callback függvényhez, amely számára minden szükséges változó megőrzésre került. 2010.03.30. – Budapest.js A closure szerepe a Javascriptben © FARKAS Máté – 3
4.
Név ütközések elkerülése jQuery.noConflict(); (function(
$ ) { window.changeSomething = function() { $('div').css('background','#ff0'); } })( jQuery ); Ha más keretrendszerrel együtt használjuk a jQuery-t, nem szeretnénk, hogy a mindkettő changeSomething(); által használt $ függvény miatt konfliktus alert($); // undefined legyen. A jQuery-re támaszkodó függvé- nyeinket külön scope-ba tesszük, így ezen belül a $ mindig a jQuery-t jelenti, és ezen kívül sem okoz konfliktust. 2010.03.30. – Budapest.js A closure szerepe a Javascriptben © FARKAS Máté – 4
5.
Időzítések var timer =
function( $d, start, end ) { var counter = start; (function() { // one step counter++; $d.html( counter ); if (counter < end ) setTimeout( arguments.callee, 500 ); else alert('Finished'); })(); } Az időzítők (setTimeout, setInterval) var $d = $('div'); a globális névtérben dolgoznak, így timer($d, 0, 10); closure-t hoznak létre – az sem baj, ha névtelen függvénnyel dolgozunk. $d.css('background','#ff0'); 2010.03.30. – Budapest.js A closure szerepe a Javascriptben © FARKAS Máté – 5