Dieser Artikel analysiert die Erstellung und Aufrufmethoden anonymer Funktionen in JS. Teilen Sie es für Ihre Referenz. Die spezifische Implementierungsmethode lautet wie folgt:
Anonyme Funktionen sind Funktionen ohne Namen, auch Verschluss genannt, die eine vorübergehende Erstellung einer Funktion ohne festgelegten Namen ermöglichen. Am häufigsten als Wert für Rückrufparameter verwendet, wissen viele Anfänger nicht über anonyme Funktionen. Lassen Sie es uns hier analysieren.
Funktionsfunktionsname (Parameterliste) {Funktion Körper;}
Wenn Sie anonyme Funktionen erstellen, sollte dies sein:
function () {function body;}
Da es sich um eine anonyme Funktion handelt, sind im Allgemeinen keine Parameter übergeben.
Warum anonyme Funktionen erstellen? Unter welchen Umständen werden anonyme Funktionen verwendet? Es gibt zwei gemeinsame Szenarien für anonyme Funktionen, eine ist die Rückruffunktion und die andere besteht darin, die Funktion direkt auszuführen.
Rückruffunktionen wie Ajax Asynchronous Operations erfordern Rückruffunktionen. Ich werde es hier nicht ausführlich erklären. In Bezug auf direkte Ausführungsfunktionen werde ich es verstehen, nachdem ich ein Beispiel angesehen habe:
Kopieren Sie den Code wie folgt: <script Language = "JavaScript">
var a = "a";
(Funktion(){
var a = "b";
Alarm (a);
}) ();
Alarm (a);
</script>
Im obigen Code werden zwei Alarmfelder nacheinander ausgegeben. Der Inhalt der ersten Alarmbox ist B und der zweite a. Haben Sie irgendwelche Vorteile gesehen? Rechts kann die Verwendung der Funktionsausführung den Umfang der Variablen so begrenzen, dass dieselben Variablen in verschiedenen Skripten koexistieren können.
Lassen Sie uns im Folgenden zunächst die Konzepte im Zusammenhang mit anonymen Funktionen verstehen.
Funktionsanweisungen. Um eine Funktion zu verwenden, müssen wir zunächst ihre Existenz deklarieren. Die häufigste Möglichkeit, eine Funktion mit Funktionsanweisungen zu definieren, z. B.:
Kopieren Sie den Code wie folgt: Funktion ABC () {
// Code zu verarbeiten
}
Funktion ABC () {// Code zu verarbeiten}
Natürlich kann Ihre Funktion auch mit Parametern oder sogar mit Rückgabewerten ausgesetzt sein.
Die Codekopie lautet wie folgt: Sehen Sie sich PlainCopy auf ClipboardPrint an.
Funktion ABC (x, y) {
Rückgabe x+y;
}
Funktion ABC (x, y) {return x+y; }
Unabhängig davon, wie Sie Ihre Funktion definieren, übersetzt der JS -Interpreter sie jedoch in ein Funktionsobjekt. Beispielsweise definieren Sie die Funktionsnummer eines der oben genannten Beispiele und geben den folgenden Code ein:
Kopieren Sie den Code wie folgt: alert (Typof ABC); // "Funktion"
Ihr Browser wird ein Eingabeaufforderungschachtel eröffnen und Sie dazu veranlasst, dass ABC ein Funktionsobjekt ist. Was genau ist das Funktionsobjekt?
Funktionsobjekt
Das Funktionsobjekt ist ein inhärentes Objekt in JavaScript, und alle Funktionen sind tatsächlich ein Funktionsobjekt. Schauen wir uns zunächst an, ob das Funktionsobjekt den Konstruktor direkt verwenden kann, um eine neue Funktion zu erstellen? Die Antwort lautet ja. Zum Beispiel:
Die Codekopie lautet wie folgt: var abc = neue Funktion ("x", "y", "return x*y;");
Alarm (ABC (2,3)); // "6"
Ich glaube, jeder sollte ein gewisses Verständnis dafür haben, wie man jetzt eine Funktion deklariert. Was ist also eine anonyme Funktion?
Anonyme Funktionen deklarieren
Wie der Name schon sagt, sind anonyme Funktionen Funktionen ohne tatsächliche Namen. Zum Beispiel entfernen wir den Namen der Funktion im obigen Beispiel und bestimmen dann, ob es sich um eine Funktion handelt:
Kopieren Sie den Code wie folgt: alert (typeof function () {}); // "Funktion"
alert (typeof function (x, y) {return x+y;}); // "Funktion"
alert (typeof neue Funktion ("x", "y", "return x*y;")) // "Funktion"
alert (typeof function () {}); // "Funktion"
alert (typeof function (x, y) {return x+y;}); // "Funktion"
alert (typeof neue Funktion ("x", "y", "return x*y;")) // "Funktion"
Wir können leicht erkennen, dass sie alle Funktionsobjekte sind, mit anderen Worten, sie sind alle Funktionen, aber sie haben alle ein Merkmal - ohne Namen. Also nennen wir sie "anonyme Funktionen". Genau, weil sie keinen "Namen" haben, haben wir keine Möglichkeit, sie zu finden. Dies erweitert die Frage, wie man eine anonyme Funktion nennt.
Anonyme Funktion aufrufen
Um eine Funktion aufzurufen, müssen wir eine Methode haben, um sie zu lokalisieren und zu verweisen. Wir müssen also einen Namen dafür finden. Zum Beispiel:
Kopieren Sie den Code wie folgt: var abc = function (x, y) {
Rückgabe x+y;
}
Alarm (ABC (2,3)); // "5"
Die obige Operation entspricht der Definition einer Funktion auf andere Weise. Diese Verwendung ist etwas häufiger. Wenn wir beispielsweise eine DOM -Element -Ereignishandlerfunktion einrichten, nennen wir sie normalerweise nicht, sondern geben dem entsprechenden Ereignis einen Verweis auf eine anonyme Funktion.
Es gibt tatsächlich eine andere Möglichkeit, anonyme Funktionen aufzurufen, nämlich das JQuery -Fragment, das wir sehen - use (), um die anonymen Funktionen einzuschließen und dann ein Paar Klammern (einschließlich Parameterlisten) hinzuzufügen. Schauen wir uns die folgenden Beispiele an:
Kopieren Sie den Code wie folgt: alert ((Funktion (x, y) {return x+y;}) (2,3)); // "5"
alert ((neue Funktion ("x", "y", "return x*y;")) (2,3)); // "6"
Viele Menschen fragen sich vielleicht, warum diese Methode erfolgreich aufgerufen werden kann? Wenn Sie der Meinung sind, dass diese Anwendung seltsam ist, lesen Sie bitte meine Erklärung unten.
Kennen Sie die Rolle von Klammern? Klammern können unsere Ausdrücke in Stücke unterteilen, und jedes Stück, das heißt, jedes Paar Zahnspangen hat einen Rückgabewert. Dieser Rückgabewert ist tatsächlich der Rückgabewert des Ausdrucks in Klammern. Wenn wir daher eine anonyme Funktion mit zwei Klammern einschließen, geben die Klammern ein Funktionsobjekt einer anonymen Funktion zurück. Daher ist das Hinzufügen anonymer Funktionen zum Klammerpaar wie eine benannte Funktion, und wir erhalten ihre Referenzposition. Wenn Sie also nach dieser Referenzvariablen eine Parameterliste hinzufügen, wird die Anrufform der normalen Funktion implementiert.
Ich weiß nicht, ob Sie den obigen Text verstehen können. Wenn Sie es immer noch nicht verstehen können, schauen Sie sich bitte den folgenden Code an und versuchen Sie es.
Kopieren Sie den Code wie folgt: var abc = function (x, y) {return x+y;}; // Zuwenden Sie ABC ein anonymer Funktionsobjekt zu
// Der Konstruktor von ABC ist der gleiche wie der Konstruktor anonymer Funktionen. Das heißt, die Implementierung der beiden Funktionen ist gleich.
alert ((ABC) .Constructor == (Funktion (x, y) {return x+y;}). Konstruktor);
PS: Konstruktor bezieht sich auf eine Funktion, die ein Objekt erstellt. Das heißt, der Funktionskörper, der durch das Funktionsobjekt dargestellt wird.
Kurz gesagt, verstehen Sie es (in Klammern enthaltene anonyme Funktion) als Funktionsobjekt, das durch den Ausdruck der Klammer zurückgegeben wird, und dann können Sie einen normalen Parameterlistenaufruf für dieses Funktionsobjekt machen. (Ich habe hier einen Fehler gemacht. Nur Funktionsausdrücke können nicht direkt aufgerufen werden. Entfernen Sie anonyme Funktionsklammern und müssen mit dem Ausdruck zugeordnet werden.
Schließung
Was ist eine Schließung? Verschlüsse beziehen sich auf Codeblöcke in einer bestimmten Programmiersprache, die das Vorhandensein einer Funktion erster Ebene ermöglichen und die in der Funktion ersten Ebene definierten freien Variablen nicht veröffentlicht werden können. Bis die Funktion der ersten Stufe veröffentlicht wird, können diese unveröffentlichten freien Variablen außerhalb der Funktion erster Stufe angewendet werden.
Wie? Es schwitzte ... es war okay, auch ich (obwohl ich es verstehe, war es nur eine Frage der Ausdrucksfähigkeit). Lassen Sie es uns einfacher erklären: Verschluss ist tatsächlich eine Sprachfunktion. Es bezieht sich auf die Programmiersprache, mit der Funktionen als Objekte angesehen werden können, und dann können Instanzvariablen (lokale) Variablen in Funktionen wie Operationen in Objekten definiert werden. Diese Variablen können in Funktionen gespeichert werden, bis das Instanzobjekt der Funktion zerstört wird. Andere Codeblöcke können die Werte dieser Instanzvariablen (lokale) Variablen in irgendeiner Weise erhalten und auf die Anwendung anwenden.
Ich weiß nicht, ob es klarer sein wird, nachdem es so erklärt wird. Wenn Sie immer noch nicht verstehen, vereinfachen wir es: Verschlüsse beziehen sich tatsächlich auf lokale Variablen, die in den laufenden Funktionen in der Programmiersprache definiert sind.
Schauen wir uns nun ein Beispiel an:
Kopieren Sie den Code wie folgt: var abc = Funktion (y) {
var x = y; // Dies ist eine lokale Variable
return function () {
ALERT (x ++); // Hier wird X in der Funktion der ersten Ebene in der Verschlussfunktion aufgerufen und arbeitet darauf.
Alert (y-); // Die referenzierte Parametervariable ist ebenfalls eine freie Variable
}} (5); // Initialisierung
ABC (); // "5" "5"
ABC (); // "6" "4"
ABC (); // "7" "3"
Alarm (x); // ein Fehler! "X" ist nicht definiert!
Können Sie nach dem Sehen feststellen, ob der Code -Snippet von JQuery schließt?
Meiner Meinung nach sprechen wir darüber. Ob die Schließfunktion angewendet wird, muss festgestellt werden, ob das wichtigste Element dieses Codes: unzerstörte lokale Variablen ist. Dann ist es offensichtlich, dass es unmöglich ist, die Schließfunktion ohne Implementierung anzuwenden. Aber was ist, wenn es eine Implementierung in einer anonymen Funktion gibt? Es muss auch feststellen, ob in seiner Implementierung unzerstörte lokale Variablen enthalten sind. Wenn Sie also fragen, welche Funktionen in JS zu Beginn des JQuery -Code -Snippets verwendet werden? Dann ist es nur ein Anruf bei anonymen Funktionen und anonymen Funktionen. Dies impliziert jedoch die Merkmale von Schließungen und kann jederzeit implementiert werden.
Die häufigste Verwendung:
Kopieren Sie den Code wie folgt: (function () {
Alarm ('Wasser');
}) ();
Natürlich können auch Parameter einbezogen werden:
Kopieren Sie den Code wie folgt: (Funktion (o) {
Alarm (o);
})('Wasser');
Möchten Sie gekettete Anrufe mit anonymen Funktionen verwenden? Sehr einfach:
Kopieren Sie den Code wie folgt: (Funktion (o) {
Alarm (o);
Return Argumente.Callee;
}) ('Wasser') ('Down');
Sie kennen alle gemeinsamen anonymen Funktionen. Schauen wir uns die ungewöhnlichen Ansichten an:
Kopieren Sie den Code wie folgt: ~ (function () {
Alarm ('Wasser');
}) (); // Das Schreiben ist etwas cool ~
void function () {
Alarm ('Wasser');
} (); // Es wird gesagt, dass das effizienteste ~
+function () {
Alarm ('Wasser');
} ();
-Funktion(){
Alarm ('Wasser');
} ();
~ function () {
Alarm ('Wasser');
} ();
!Funktion(){
Alarm ('Wasser');
} ();
(Funktion(){
Alarm ('Wasser');
} ()); // ein bisschen erzwungene Ausführung ~
Ich hoffe, dieser Artikel wird für JavaScript -Programme aller hilfreich sein.