1. Es wird als anonyme Funktion bezeichnet, die sofort ausgeführt wird (auch als die Funktion bezeichnet, die sofort aufruft)
2. Wenn eine anonyme Funktion eingeschlossen ist und nach hinten eine Klammer hinzugefügt wird, kann die anonyme Funktion sofort ausgeführt werden! Gibt es etwas Magisches?
3. Um eine Funktion zu verwenden, müssen wir zunächst ihre Existenz deklarieren. Die häufigste Art, die wir verwenden, besteht darin, eine Funktion mit Funktionsanweisung zu definieren
4. Funktionsobjekt
Funktionsobjekte sind inhärente Objekte 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.
var abc = new function ("x", "y", "return x*y;"); Alarm (ABC (2,3)); // "6"5. Anonyme Funktionen haben keine Namen, daher wird die Frage, wie wir sie nennen sollten (O_O), erweitert?
Anruf von anonymen Funktionen ①
var abc = function (x, y) {return x+y; } alert (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.
Anonyme Funktion ② aufrufen
Verwenden Sie (), um die anonyme Funktion einzuschließen, und fügen Sie dann ein Paar Klammern (einschließlich der Parameterliste) hinzu.
alert ((neue Funktion ("x", "y", "return x*y;")) (2,3)); // "6"6. Welche Rolle spielt die 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.
7. Funktionserklärungen, Funktionsausdrücke, anonyme Funktionen
Funktionserklärung: Funktion fnname () {…}; Verwenden Sie das Schlüsselwort der Funktion, um eine Funktion zu deklarieren, und geben Sie dann einen Funktionsnamen an, der als Funktionserklärung bezeichnet wird.
Funktionsausdruck var fnname = function () {…}; deklarieren Sie eine Funktion mit dem Schlüsselwort Funktion, nennt die Funktion jedoch nicht. Schließlich wird der anonymen Funktion eine Variable zugeordnet, die als Funktionxpression bezeichnet wird und die häufigste Form der Funktionxpressionssyntax ist.
Anonyme Funktion: function () {}; Verwenden Sie das Schlüsselwort der Funktion, um eine Funktion zu deklarieren. Die Funktion wird jedoch nicht benannt, so dass sie als anonyme Funktion bezeichnet wird. Anonyme Funktionen gehören zu Funktionsausdrücken. Anonyme Funktionen haben viele Funktionen. Wenn Sie eine Variable zuweisen, erstellen Sie eine Funktion. Wenn Sie ein Ereignis zuweisen, werden Sie Ereignishandler oder einen Verschluss usw.
Der Unterschied zwischen Funktionserklärung und Funktionsausdruck ist das
1. Wenn der JavaScript -Engine JavaScript -Code analysiert, wird die Funktionserklärung der Funktionserklärung (Funktionserklärung) in der aktuellen Ausführungsumgebung (Umfang) (Funktionenerklärungsheimen) analysiert. Funktionsausdrücke müssen warten, bis die Javascirtp -Engine in seine Linie ausgeführt wird, bevor der Funktionsausdruck von oben bis unter die Erde analysiert wird.
2. Der Funktionsausdruck kann sofort mit Klammern aufgerufen werden. Die Funktionserklärung kann nicht durchgeführt werden und kann nur in Form von fnnname () aufgerufen werden.
Kastanie
fnnname (); function fnname () {...} // normal, da 'fördern' Die Funktionserklärung kann der Funktionsaufruf fnname () sein; var fnname = function () {...} // Ein Fehler wird gemeldet, der variable fnname hat keine Referenz auf die Funktion, und der Funktionsaufruf muss nach dem Funktionsausdruck stehen, nach dem Funktionsausdruck nachkommen muss, dass der Funktionsausdruck nach dem Funktionsausdruck bestehen muss.Kastanie
var fnnname = function () {alert ('Hallo Welt');} (); // Pakete werden nach dem Funktionsausdruck hinzugefügt. Wenn die JavaScript -Engine hier analysiert, kann die Funktion sofort aufgerufen werden, wenn die JavaScript -Engine hier die Funktion fnnname () {alert ('Hello World') analysiert;} (); // Es wird keinen Fehler geben, aber die JavaScript -Engine analysiert die Funktionserklärung, ignoriert die nachfolgende Parenthese. } (); // Der Syntaxfehler, obwohl anonyme Funktionen zu Funktionsausdrücken gehören, wird kein Zuordnungsvorgang durchgeführt, // so behandelt die JavaScript -Engine das Schlüsselwort der Funktion am Anfang als Funktionserklärung und meldet einen Fehler: Ein Funktionsname ist erforderlichWenn Sie nach der Funktionskörper Klammern hinzufügen möchten, können Sie sie sofort aufrufen, dann muss diese Funktion ein Funktionsausdruck und keine Funktionserklärung sein.
Kastanie
(Funktion (a) {console.log (a); // Firebug -Ausgabe 123, Verwenden Sie den () Operator}) (123); (Funktion (a) {console.log (a); // Firebug -Ausgabe 1234, Verwenden Sie den () Operator} (1234));! Funktion (a) {console.log (a); // Firebug Output 12345, Verwendung! Operator} (12345); +Funktion (a) {console.log (a); // Firebug Output 123456, verwenden Sie + Operator} (123456); -Funktion (a) {console.log (a); // Firebug Output 1234567, Verwendung - Bediener} (1234567); var fn = function (a) {console.log (a); // Firebug -Ausgabe 12345678, Verwendung = Operator} (12345678)Sie können das Ausgabeergebnis sehen und vor der Funktion hinzufügen! , +, - und sogar Kommas können verwendet werden, um unmittelbar nach der Definition der Funktion auszuführen, und ()! Operatoren wie +, -, = Funktionserklärungen in Funktionsausdrücke umwandeln und die Mehrdeutigkeit zwischen der Identifizierung von Funktionsausdrücken und Funktionen der JavaScript -Engine beseitigen. Damit wird die JavaScript -Engine mitgeteilt, dass dies ein Funktionsausdruck ist, keine Funktionserklärung. Sie können Klammern nach dem IT hinzufügen und den Funktionscode sofort ausführen.
Das Hinzufügen von Klammern ist der sicherste Weg, es zu tun, denn! Bediener wie, +und - führen auch Operationen mit dem Rückgabewert der Funktion durch, was manchmal unnötige Probleme verursacht.
Aber was nützt das Schreiben auf diese Weise?
In JavaScript gibt es kein Konzept des privaten Umfangs. Wenn Sie einige Variablen im globalen oder lokalen Bereich für ein von mehreren Personen entwickeltes Projekt deklarieren, kann dies von anderen mit demselben Namen überschrieben werden. Gemäß den Eigenschaften der Bereichskette von JavaScript -Funktionen kann diese Technik verwendet werden, um einen privaten Bereich zu imitieren und eine anonyme Funktion als "Container" zu verwenden. Der "Container" kann auf externe Variablen zugreifen, während die externe Umgebung im "Container" nicht auf Variablen zugreifen kann, sodass die in (function () {…}) () definierten Variablen nicht mit externen Variablen in Konflikt stehen, die häufig als "anonymer Wrapper" oder "Namespace" bekannt sind.
JQuery verwendet diese Methode. Wenn JQuery -Code in (Funktion (Fenster, undefiniert) {… JQuery Code…} (Fenster) ist, kann er die internen Variablen von JQuery beim Aufrufen von JQuery -Code im globalen Bereich schützen.