1. Was ist eine anonyme Funktion?
Es gibt im Allgemeinen drei Möglichkeiten, eine Funktion in Javascript zu definieren:
Funktionsschlüsselwort-(Funktions-)Anweisung:
function fnMethodName(x){alert(x);}
Funktionsliterale:
var fnMethodName = function(x){alert(x); }
Function()-Konstruktor:
var fnMethodName = new Function('x','alert(x);')
Die oben genannten drei Methoden definieren dieselbe Methodenfunktion fnMethodName, die erste ist die meiste Häufig verwendete Methoden: Die beiden letztgenannten kopieren eine Funktion in die Variable fnMethodName, und diese Funktion hat keinen Namen, dh eine anonyme Funktion. Tatsächlich verfügen viele Sprachen über anonyme Funktionen.
2. Der Unterschied zwischen Funktionsliteral und Function()-Konstruktor
Obwohl es sich bei Funktionsliteral um eine anonyme Funktion handelt, können Sie beim Schreiben von A einen beliebigen Funktionsnamen angeben Eine rekursive Funktion kann sich selbst aufrufen, die Verwendung des Function()-Konstruktors jedoch nicht.
var f = function fact(x) {
if (x < = 1) return 1;
else return x*fact(x-1);
Function()-Konstruktor ermöglicht Laufzeit-Javascript-Code Erstellung und Zusammenstellung von Dynamiken. In dieser Hinsicht ähnelt es der globalen Funktion eval().
Der Function()-Konstruktor analysiert den Funktionskörper und erstellt bei jeder Ausführung ein neues Funktionsobjekt. Daher ist die Effizienz des Aufrufs des Function()-Konstruktors in einer Schleife oder einer häufig ausgeführten Funktion sehr gering. Im Gegensatz dazu werden Funktionsliterale nicht jedes Mal neu kompiliert, wenn sie auftreten.
Wenn Sie eine Funktion mit dem Function()-Konstruktor erstellen, folgt sie nicht dem typischen Gültigkeitsbereich. Sie wird immer als Funktion der obersten Ebene ausgeführt.
var y = "global"
function constructionFunction () {
var y = "local";
return new Function("return y"); // Lokale Variable kann nicht abgerufen werden
alert(constructFunction()() ); // Ausgabe „global“
Im Vergleich zur Funktionsschlüsselwortdefinition hat der Function()-Konstruktor seine eigenen Eigenschaften und ist viel schwieriger zu verwenden, daher wird diese Technik normalerweise selten verwendet. Der Ausdruck des Funktionsliterals kommt der Definition des Funktionsschlüsselworts sehr nahe. In Anbetracht des vorherigen Unterschieds gibt es zwar Neuigkeiten, dass literale anonyme Funktionen in einigen Webkit-Engines unter OS Weitere Einzelheiten finden Sie im Kapitel „Funktionen“ von „JavaScript: The Definitive Guide, 5. Auflage“.
3. Codemuster anonymer Funktionen
Gestern hat Hedger Wang in seinem Blog mehrere Codemuster anonymer Funktionen vorgestellt:
Fehlermuster: Es funktioniert nicht Der Browser meldet einen Syntaxfehler.
function(){
alert( 1);
}();
Funktionsliteral: Deklarieren Sie zuerst ein Funktionsobjekt und führen Sie es dann aus.
(function(){
alert (1) ;
} ) ( );
Prioritätsausdruck: Da Javascript Ausdrücke von der Innenseite der Klammern nach außen ausführt, können Sie Klammern verwenden, um die Ausführung der deklarierten Funktion zu erzwingen .
( function(){
alert (2) ;
} ( ) );
Void-Operator: Verwenden Sie den Void-Operator, um einen einzelnen Operanden auszuführen, der nicht in Klammern steht.
Code kopieren Der Code lautet wie folgt:
void function(){
alert(3);
}()
Diese drei Methoden sind gleichwertig, Hedger Wang bevorzugt aus persönlichen Gründen die dritte Es gibt drei Typen, aber in tatsächlichen Anwendungen sehe und verwende ich den ersten Typ.
4. Anwendung anonymer Funktionen
Der erste Satz in „Ein Modulmodus von Javascript“ lautet „Globale Variablen sind der Teufel“. In Kombination mit dem Schlüsselwort var können anonyme Funktionen effektiv sicherstellen, dass Javascript auf die Seite geschrieben wird, ohne die globalen Variablen zu verschmutzen. Dies ist sehr effektiv und elegant, wenn Sie Javascript zu einer unbekannten Seite hinzufügen. Tatsächlich werden anonyme Funktionen in YUI und den entsprechenden Paradigmen häufig verwendet und werden auch in anderen Javascript-Bibliotheken häufig verwendet.
Javascript ist der Grundstein der funktionalen Programmierung. Einzelheiten finden Sie unter „Schreiben von schönem JavaScript mit funktionalen Programmiertechniken“ und „Leitfaden zur funktionalen JavaScript-Programmierung“.