Die erste Funktionssyntax lautet Anonymer Funktionsausdruck :
var functionOne = function() {
// do something...
};
Die zweite ist Funktionserklärung :
function functionTwo () {
// do something...
}
Der Hauptunterschied zwischen beiden ist der Funktionsname, da Anonyme Funktionen haben keinen Namen zu nennen.
Benannte Funktionen vs. Anonyme Funktionen
Anonyme Funktionen sind schnell und einfach zu deklarieren, und viele Bibliotheken und Werkzeuge neigen dazu, diese idiomatische Art von Code zu fördern. Anonyme Funktionen haben jedoch einige Nachteile :
-
Lesbarkeit: anonyme Funktionen lassen einen Namen weg, was zu weniger lesbarem Code führen kann.
-
Fehlersuche: Anonyme Funktionen haben in Stacktraces keinen Namen, was die Fehlersuche erschweren kann.
-
Selbstreferenz: was ist, wenn die Funktion auf sich selbst verweisen muss, z. B. für eine Rekursion.
Benennung von Funktionsausdrücken
Die Angabe eines Namens für Ihren Funktionsausdruck behebt alle diese Nachteile und hat keine spürbaren Nachteile. Die beste Praxis ist es, Funktionsausdrücke immer zu benennen:
setTimeout(function timeHandler() { // <-- look, a name here!
console.log("I've waited 1 second");
}, 1000);
Benennung von IIFEs (Immediate Invoked Function Expression)
(function IIFE(str) { // <-- look, always name IIFEs!
console.log(str); // "Hello!"
})('Hello!');
Bei Funktionen, die einer Variablen zugewiesen sind, ist die Benennung der Funktion in diesem Fall nicht sehr gebräuchlich und kann zu Verwirrung führen; in diesem Fall ist die Pfeilfunktion möglicherweise die bessere Wahl.