Wann ein Verschluss in JavaScript erstellt wird, können Sie lokale Variablen einer Funktion referenzieren , selbst nachdem die Funktion beendet wurde, mit den Werten, die sie am Ende der Funktion hatte . Immer wenn Sie eine Funktion verwenden innerhalb einer anderen Funktion , verwenden Sie " eval" in einer anderen Funktion oder eine Variable definieren, innerhalb einer Funktion ohne "var ", erstellen Sie eine Schließung. Viele Programmierer erstellen Schließungen ohne es zu merken durch die Festlegung einer anonymen Funktion innerhalb einer Funktion . Closures sind hilfreich, wenn Sie Variablen Eventhandler oder AJAX Callback-Funktionen übergeben und privaten Variablen und Methoden in JavaScript-Objekte emulieren wollen . Seien Sie vorsichtig bei der Erstellung von Schließungen , aber, weil sie Speicherlecks in Microsoft Internet Explorer verursachen können. Understanding Closures
JavaScript und den meisten anderen Programmiersprachen , werden die lokalen Variablen einer Funktion nach dem Ende der Funktion zerstört. Jedoch, wenn Sie eine Funktion innerhalb einer anderen Funktion in JavaScript erstellen, werden die lokalen Variablen der äußeren Funktion auch nach , weil die Variablen durch die innere Funktion verwiesen werden könnte endet erhalten. Das folgende Beispiel enthält eine Funktion " Preisträger ", dass eine Schließung schafft durch eine anonyme Funktion , die es gibt . Wir nennen das anonyme Funktion direkt von außen , ohne auch nur gehen durch die übergeordneten Funktion :
Funktion Preisträger (name) {var Gewinner = "Sie gewinnen den Preis , " + name ; var announce = function () { alert ( Sieger) ;} if ( Math.floor ( Math.random () * 11 ) == 7) Rückkehr bekannt zu geben; zurück null;}
if ( var SayIt = Preisträgerin ( "Steve" ) ) SayIt ();
Übergabe von Parametern an Event-Handler
Eine Verwendung von Verschlüssen ist auf Variablen zur Verfügung , um Ereignishandler zu machen. Betrachten Sie das folgende Beispiel, in dem ein Verschluss von einem anonymen Funktion in definierten erstellt wird " SetHandler . " Der anonymen Funktion Referenzen eines Parameters " SetHandler . " An dem Punkt, das Ereignis ausgelöst wird , obwohl " SetHandler " abgeschlossen , werden die Werte ihrer Variablen , einschließlich der Parameter , bei der Funktion Abschluss für die anonyme Funktion erhalten. Ein separater Schließung wird für jede Iteration in der Schleife erstellt .
Funktion SetHandler (Tür, Preis) { door.addEventListener ("click " , function ( ) {alert ( "Preis für Tür " + Tür + " ist " + Preis) ;} , false); }
window.onload = function () {for (var i = 1; i < = 3; i + +) { SetHandler ( document.getElementById ( " Tür " + i) , prize [i] );}}
Übergabe von Parametern an AJAX Callback-Funktionen
Ähnlich dem vorherigen Beispiel können wir Parameter AJAX Callback- Funktionen übergeben mit Verschlüssen . Wenn Sie einen AJAX-Aufruf , in dem der Antrag Variable ist global zu machen , haben Sie die Chance, einen Parameter an die Callback- Funktion übergeben , weil ein einzelner globaler wird erstellt eliminiert. Durch die Anforderung lokale Variable , können Sie eine Schließung und geben die Callback-Funktion Zugriff auf Anforderung Daten. Im folgenden Beispiel erstellen wir eine Schließung durch die Definition der Callback- Funktion, die eine lokale Variable zu seinem übergeordneten Funktion verwendet . Eine separate Callback wird für jedes der 10 " macheRequest " Anrufe erstellt
Funktion process () {for . (Var i = 0; i < 10; i + +) { macheRequest (i );}
Funktion macheRequest (die) {var Anfrage; var = Lookup Einsatz Das (die) ; if ( window.XMLHttpRequest ) { request = new XMLHttpRequest (); } else if ( window.ActiveXObject ) { request = new ActiveXObject ( " Microisoft.XMLHTTP ");} request.onreadystatechange = function () { parse ( Einsatz Das );} request.open (" GET ", url ); request.send ();}
Privat Variablen und Methoden in JavaScript
in JavaScript sind alle Mitglieder eines Objekts Öffentlichkeit, im Gegensatz zu einigen anderen objektorientierten Sprachen, die für private Variablen und Methoden zu ermöglichen. Closures ermöglicht es Ihnen alle Methoden und Variablen in JavaScript zu emulieren. Im folgenden Beispiel wird das Objekt "Geheimnisse" wird erstellt und nach ihrer Definition ausgeführt. Wenn er ausgeführt wird , enthält es ein anonymes Objekt mit zwei Methoden: "show " und " Super ", die einen Parameter annimmt . Sowohl die Variable " SecretCode " und die Funktion " supersecret " kann nur durch die beiden Methoden in der "Geheimnisse" Objekt zugegriffen werden . In der Tat , sie sind private Mitglieder von Madame
var Geheimnisse = function ( ) {var SecretCode = (( (1 + Math.random ()) * 0x100000 )