Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
JavaScript a väčšina iných programovacích jazykov , miestne premenné a funkcie sú zničené po tom , čo funkcia končí . Avšak , keď vytvoríte funkciu vnútri inej funkcie v JavaScriptu , miestne premenné vonkajšie funkcie sú zachované aj po ukončí , pretože premenné môžu byť odkazované vnútorné funkcie . Nižšie uvedený príklad obsahuje funkciu " výherca " , ktorý vytvára uzáver prostredníctvom anonymnej funkcie , ktoré vracajú . Hovoríme, že anonymné funkcie priamo z vonku , bez dokonca ísť cez materské funkcie :
funkcie výherca ( meno ) { víťaz var = " Vyhrali ste cenu , " + meno ; var oznámiť = function ( ) { alert ( víťaz ) ; } ; if ( Math.floor ( Math.random ( ) * 11 ) == 7 ) vrátiť oznámiť , return null ; }
if ( var Sayit = výherca ( " Steve " ) ) Sayit ( ) ;
Odovzdávanie parametrov do obslužnej rutiny udalostí
použitie uzáverov je , aby sa premenné k dispozícii obsluhy udalostí . Zoberme si nasledujúci príklad , v ktorom je uzáver vytvorený anonymné funkcie definované v " SetHandler . " Anonymné funkcie odkazuje na parameter " SetHandler . " V okamihu , Udalosť , aj keď " SetHandler " dokončil , hodnoty jeho premenných , vrátane jeho parametrov , na záver funkcie sú zachované pre anonymné funkcie . Samostatný uzáver je vytvorený pre každú iteráciu v slučke .
Funkcia SetHandler ( dvere , cena ) { door.addEventListener ( " click " , function ( ) { alert ( " cena za dvere " + dvere + " je " + cena ) ; } , false ) ; }
window.onload = function ( ) { for ( var i = 1 ; i < = 3 ; i + + ) { SetHandler ( document.getElementById ( " door " + i ) , cena [ i ] ) ; } }
Odovzdávanie parametrov AJAX funkcia spätného volania
Podobne ako v predchádzajúcom príklade , môžeme odovzdať parametre callback funkcie AJAX s uzávermi . Ak vykonáte volanie AJAX , v ktorom je premenná žiadosť je globálna , ste eliminuje možnosť odovzdať parameter pre funkciu spätného volania , pretože jeden globálny požiadavka je vytvorený . Tým , že žiadosť premenné lokálne , môžete vytvoriť uzáver a dať funkciu spätného volania prístup k dátam vyžiadanie špecifické. V nižšie uvedenom príklade , vytvoríme uzavretie definovaním funkcie spätného volania , ktorá používa premenné lokálne svojej materskej funkcie . Samostatný spätné volanie je vytvorený pre každý z 10 " vytvoritZadost " volanie klipart
funkciu postup ( ) { for . ( Var i = 0 ; i < 10 ; i + + ) { vytvoritZadost ( i ) ; } klipart
funkcie vytvoritZadost ( ktoré ) { var žiadosť ; var useThis = vyhľadávania ( ktoré ) ; if ( window.XMLHttpRequest ) { request = new XMLHttpRequest ( ) ; } else if ( window.ActiveXObject ) { request = new ActiveXObject ( " Microisoft.XMLHTTP " ) ; } request.onreadystatechange = function ( ) { parse ( useThis ) ; } request.open ( " GET " , url ) ; request.send ( ) ; }
súkromia premenné a metódy v JavaScripte
JavaScript , všetci členovia objektu sú verejné , na rozdiel od niektorých iných objektovo orientovaných jazykoch , ktoré umožňujú súkromné premenné a metódy . Uzávery umožňujú emulovať súkromné metódy a premenné v JavaScripte . V nasledujúcom príklade je objekt " tajomstvo " je vytvorený a spustený na definíciu . Po spustení obsahuje anonymný objekt s dvoma spôsobmi : " show " a " super " , ktorá preberá parameter . Obe premenné " secretCode " a funkcia " superSecret " možno pristupovať len pomocou týchto dvoch metód v " tajomstve " objekt . V skutočnosti , oni sú súkromné členmi
var tajomstvo = function ( ) { var secretCode = ( ( ( 1 + Math.random ( ) ) * 0x100000 )