Angesichts dieses Javascript-Beispiels habe ich gefunden
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
Welchen Vorteil hat es, einer Var eine Funktion zuzuweisen?
javascript
Octopusgrabbus
quelle
quelle
Antworten:
Die kurze Antwort, die ich glaube, ist einfach, dass Sie eine anonyme Funktion erstellen, die einer Variablen zugewiesen ist, anstatt eine benannte Funktion mit ...
Eine gute Möglichkeit, die Unterschiede zu überprüfen, besteht darin, .ToString () aufzurufen und den Unterschied zu sehen, oder Sie können console.log (sum.name) ausführen. Einer gibt einen tatsächlichen Namen und der andere nichts, nämlich die anonyme Funktion (die dem var zugewiesene). Es gibt auch Besonderheiten, wie die var sum = function () {} zur Laufzeit definiert wird und die function sum () {} zur Analysezeit definiert wird.
quelle
Ein Vorteil ist, dass Sie keine Funktionsdeklaration in einem Block verwenden können. Sie können sich nur auf der obersten Ebene einer Datei oder direkt in einer anderen Funktion befinden.
Diese sind alle vom Standard nicht spezifiziert und Browser führen unterschiedliche Aktionen aus, siehe /programming/10069204/function-declarations-inside-if-else-statements . Wenn Sie also manchmal den anderen Stil verwenden müssen, möchten Sie dies aus Gründen der Konsistenz möglicherweise immer tun
Ich bin mir auch nicht sicher, aber wenn ich mich richtig erinnere, waren einige alte Minifizierer nicht klug genug, um Funktionsdeklarationen zu verarbeiten und sie nicht umzubenennen.
quelle
Ich bin kein Javascript-Experte, also nimm das mit einem Körnchen Salz. Ich denke, in einigen Fällen könnten die Leute es aus Stilgründen tun und dasselbe könnte erreicht werden, indem einfach "function sum () {...}" geschrieben wird.
Das Zuweisen einer Funktion zu einer Variablen ist jedoch eine sehr leistungsfähige Technik in der funktionalen Programmierung. Wenn Sie mit OOP vertraut sind, ähnelt es dem Polymorphismus. Denken Sie an das klassische Beispiel der Basisklasse Tier und der Klasse Katzen / Hund. Sie können Code schreiben, der mit Animal funktioniert. Wenn jedoch eine Funktion aufgerufen wird, kann diese Funktion je nach Instanztyp unterschiedliche Aufgaben ausführen.
In der funktionalen Programmierung könnten Sie einen Algorithmus haben, der mit "einer Funktion" arbeitet. Wenn Sie jedoch eine Variable zum Aufrufen dieser Funktion verwenden, haben Sie die Flexibilität, zur Laufzeit eine andere Funktion zuzuweisen.
Angenommen, Sie schreiben einen Algorithmus, um 10.000 Datenpunkte in einem Fenster mit einem Durchmesser von nur 500 Pixel darzustellen. Jedes Pixel repräsentiert dann 20 Datenpunkte. Um sie darzustellen, müssen Sie diese 20 Datenpunkte zu einem einzigen Wert zusammenfassen.
Angenommen, Sie definieren einen Algorithmus zur Darstellung der 10.000 Punkte, und dieser Algorithmus verwendet eine Funktionsvariable namens Aggregat wie folgt:
Jetzt kann Ihr Benutzer zur Laufzeit auswählen, wie die Daten aggregiert werden sollen. Ihre tatsächliche Funktionsvariable kann eine der folgenden sein:
quelle
Es ist meistens eine Frage des Stils, da die einzigen Situationen, in denen sich der Unterschied zeigt (Aufrufen einiger Funktionen vor dem Beenden aller Deklarationen; Verwenden der toString-Methode), meiner Meinung nach Eckfälle sind.
Eines der Argumente, die ich gehört habe, um diesen
var =
Stil zu unterstützen, ist, dass er mit der Deklaration normaler Variablen übereinstimmt. Dies begrenzt die Anzahl der von Ihnen verwendeten Sprachfunktionen und macht es einfacher, Ihr Programm einer neuen Person in Javascript vorzustellen.quelle