? Når en nedleggelse er opprettet i JavaScript, kan du referere til lokale variabler til en funksjon , selv etter at funksjonen er avsluttet, med de verdiene de hadde ved utgangen av funksjonen. Når du bruker en funksjon inne i en annen funksjon , bruk " eval " inni en annen funksjon eller definere en variabel inne i en funksjon uten "var , " du oppretter en nedleggelse. Mange programmerere lage nedleggelser uten å vite det ved å definere en anonym funksjon i en funksjon. Nedleggelser er nyttig når du ønsker å passere variabler å hendelseshåndterere eller AJAX tilbakeringing funksjoner og å etterligne private variabler og metoder i JavaScript objekter . Vær forsiktig når du oppretter nedleggelser , men fordi de kan forårsake minnelekkasjer i Microsoft Internet Explorer . Forstå Nedlegging
JavaScript og de fleste andre programmeringsspråk , er de lokale variabler av en funksjon ødelagt etter at funksjonen avsluttes. Men når du oppretter en funksjon inne i en annen funksjon i JavaScript, er de lokale variabler av den ytre funksjonen bevart selv etter at den opphører fordi variablene kan være referert til av den indre funksjonen . Eksempelet nedenfor inneholder en funksjon " prisvinner " som skaper en nedleggelse gjennom en anonym funksjon , som den returnerer . Vi kaller det anonym funksjon direkte fra utsiden uten å gå gjennom den overordnede funksjon : en
funksjon prisvinner ( navn) {var vinneren = " Du vinner premien , " + navn ; Var kunngjøre = function ( ) { alert ( vinner) ;} ; if ( Math.floor ( Math.random ( ) * 11 ) == 7 ) tilbake kunngjøre ; returnere null; }
hvis (var LesOpp = prisvinner ( " Steve" ) ) LesOpp ();
Passing Parametere til Begivenhet handlers
En bruk av nedleggelser er å gjøre variabler tilgjengelig for hendelseshåndterere. Betrakt følgende eksempel der en nedleggelse er skapt av en anonym funksjon definert i " setHandler . " De anonyme funksjonen refererer til en parameter for « setHandler . " På det punktet hendelsen branner , selv om " setHandler " er ferdig , blir ikke verdiene av variablene , inkludert dens parametre , på funksjon konklusjon bevart for anonym funksjon . En egen nedleggelse er opprettet for hver iterasjon i loop .
Funksjon setHandler (dør , premie ) { door.addEventListener ( "klikk" , function () { alert (" Prize for dør " + dør + "er" + premie ) ;} , false); }
window.onload = function () { for (var i = 1; i < = 3; i + + ) { setHandler ( document.getElementById ( "dør " + i) , premie [ i] ); } }
Passing Parametere til AJAX tilbakeringing funksjoner
i likhet med det forrige eksemplet , vi kan sende parametre til AJAX tilbakeringing funksjoner med nedleggelser. Hvis du gjør en AJAX samtale der anmodningen variabelen er global , har du eliminert muligheten til å passere en parameter til tilbakekallsfunksjon fordi en enkelt global forespørsel er opprettet. Ved å gjøre forespørselen variable lokale, kan du opprette en nedleggelse og gi tilbakekallsfunksjon tilgang til forespørsel - spesifikke data . I eksempelet nedenfor , skaper vi en nedleggelse ved å definere tilbakeringing funksjon som bruker en variabel lokale til sin overordnede funksjon . En egen tilbakeringing er opprettet for hver av de 10 " makeRequest " samtaler
funksjon prosess ( ) { for . ( Var i = 0 ; i < 10; i + + ) { makeRequest ( i) ; }
funksjon makeRequest (som ) {var forespørsel, Div. useThis = oppslag (som ), hvis ( window.XMLHttpRequest ) { forespørsel = new XMLHttpRequest (); } else if ( window.ActiveXObject ) { forespørsel = new ActiveXObject ( " Microisoft.XMLHTTP "); } request.onreadystatechange = function () { parse ( useThis ) ;} request.open ( " GET ", url ) ; request.send (); }
Privat variabler og metoder i JavaScript
JavaScript, alle medlemmer av et objekt er offentlige, i motsetning til enkelte andre objektorienterte språk som gjør det mulig for private variabler og metoder. Nedleggelser tillate deg å etterligne private metoder og variabler i JavaScript. I følgende eksempel objektet " hemmeligheter " er opprettet og henrettet ved definisjon. Når henrettet , den inneholder en anonym objekt med to metoder: "show" og " super ", som tar en parameter. Både variabelen " secretCode " og funksjonen " Superhemmelige " kan bare nås gjennom de to metodene i " hemmeligheter " objekt . I praksis er de private medlemmer av
VAR hemmeligheter = function ( ) {var secretCode = ( ( ( 1 + Math.random ( ) ) * 0x100000 )