Das Buch JavaScript lernen definiert anonyme Funktionen wie folgt ...
Funktionen sind Objekte. So können Sie sie erstellen - genau wie ein
%Vor%String
oderArray
oder ein anderer Typ - indem Sie einen Konstruktor verwenden und die Funktion einer Variablen zuweisen. Im folgenden Code wird eine neue Funktion mit dem KonstruktorFunction
erstellt, wobei der Funktionskörper und das Argument als Argumente übergeben werden:Diese Art von Funktion wird oft als anonyme Funktion bezeichnet, weil die Funktion selbst nicht direkt deklariert oder benannt wird.
Ist das die korrekte Definition einer "anonymen Funktion" in JavaScript? Wenn nicht, was ist eine anonyme Funktion und gibt es einen Unterschied zwischen einer anonymen Funktion und einem Funktionsliteral?
Da Sie sich für Funktionen interessieren, hier einige wichtige Dinge zu wissen.
var abc = function() { ... }
ist als Funktionsausdruck bekannt. Die Variable wird dieser anonymen Funktion zur Ausführungszeit zugewiesen, obwohl ihre Variablendeklaration an den Anfang des aktuellen Ausführungskontexts (Gültigkeitsbereich) gehängt wird.
Ein Funktionsausdruck kann jedoch auch einen Namen erhalten, so dass er innerhalb seines Körpers aufgerufen werden kann, um ihn rekursiv zu machen. Denken Sie daran IE hat einige Probleme damit. Wenn Sie ihm einen Namen zuweisen, ist es definitiv nicht eine anonyme Funktion.
Eine Funktion wie function abc() { ... }
wird als Funktionsdeklaration bezeichnet. Ihre Definition wird an die Spitze ihres Geltungsbereichs gehoben. Sein Name ist innerhalb des Bereichs und des übergeordneten Bereichs verfügbar.
Es ist eine anonyme Funktion, die jedoch der Variablen sayHi
zugeordnet ist.
Wie Šime Vidas erwähnt, wird ein neues Objekt Function
mit dem Operator new
instanziiert, und Die Argumente und der Funktionskörper werden als Strings übergeben. Das resultierende Objekt wird sayHi
zugewiesen.
Die reale Verwendung einer Funktion, die diese Methode verwendet, ist selten (obwohl sie nur dazu dienen kann, zu zeigen, dass Funktionen Objekte sind). Ich glaube auch, dass die Übergabe der Argumentliste und des Funktionskörpers als String eine Funktion eval()
type aufrufen wird, was selten gut ist, wenn ein viel besseres Konstrukt verfügbar ist.
Auch Funktionen, die mit Function
erstellt wurden keine Schließung bilden .
Ich würde diese Methode nur verwenden, wenn ich aus irgendeinem Grund ein Function
mit seinen Argumenten und / oder meinem Körper als String erstellen müsste.
In der realen Welt würden Sie ...
machen %Vor%Siehe auch Kommentare von Felix und Šime für gute Diskussion und weitere Klärung.
Ich denke, eine breitere und akzeptiertere Definition einer anonymen Funktion ist eine Funktion, die ohne Namen erstellt wird.
Eine anonyme Funktion ist einfach eine Funktion ohne Namen.
%Vor%Der obige Code wäre nutzlos, da er keinen Namen hat, zu dem man ihn nennen könnte. Daher werden sie normalerweise einer Variablen zugewiesen.
%Vor%Dies ist hilfreich, da Sie eine anonyme Funktion an eine andere Funktion oder Methode übergeben können, ohne die Funktion vorher erstellen zu müssen, wie unten gezeigt.
%Vor%Dies:
%Vor%und das:
%Vor%sind zwei Ausdrücke, die das gleiche Ergebnis liefern - sie geben ein neues anonymes Funktionsobjekt zurück.
Der zweite Ausdruck (und nur der zweite Ausdruck) wird als Funktionsausdruck bezeichnet. Sie können es auch als Funktionsliteral bezeichnen (obwohl wir argumentieren könnten, dass eine Funktionsdeklaration auch ein Funktionsliteral ist).
Tags und Links javascript terminology