Es gibt zwei Hauptmethoden zum Erstellen von Funktionen in JavaScript: Funktionserklärung und Funktionsausdrücke. Beide Methoden haben unterschiedliche anwendbare Szenarien. Dieser Hinweis konzentriert sich hauptsächlich auf mehrere Hauptmerkmale von Funktionsausdrücken und deren Nutzungsszenarien, die nachstehend beschrieben werden.
Hauptmerkmale
• Optionaler Funktionsname
Der Funktionsname ist ein notwendiger Teil der Funktionserklärung. Dieser Funktionsname entspricht einer Variablen. Die neu definierte Funktion wird in diese Variable kopiert. Der Aufruf zur Funktion muss in Zukunft durch diese Variable durchgeführt werden. Für Funktionsausdrücke ist der Name der Funktion optional, beispielsweise:
var sub = function (a1, a2) {return a1-a2; }In diesem Beispiel hat der Funktionsausdruck keinen Namen und gehört zum anonymen Funktionsausdruck. Schauen wir uns das folgende Beispiel an:
var sub = Funktion f (a1, a2) {return a1-a2; } console.log (f (5,3)); // Falsche Anrufmethode Konsole.log (Sub (5,3)); // Correct Call -MethodeIn diesem Beispiel lautet der Name des Funktionsausdrucks f. Dieser Name F wird tatsächlich zu einer lokalen Variablen innerhalb der Funktion und bezieht sich auf das Funktionsobjekt selbst. Es ist von großer Nutzung, wenn die Funktion rekursiv ist, und wird später ausführlich besprochen.
• Erstellen Sie während der Ausführungsphase (anders als Funktionserklärungen)
Diese Funktion ist, dass sich der Funktionsausdruck offensichtlich von der Funktionserklärung unterscheidet.
Der Dolmetscher behandelt nicht beide Methoden beim Parsen von JavaScript -Code nicht gleichermaßen. Der Interpreter wird zunächst die Funktionserklärung lesen und sie zur Verfügung stellen, bevor Code ausgeführt wird. Während für Funktionsausdrücke müssen Sie warten, bis der Interpreter in die Codelinie ausgeführt wird, in der er sich befindet, bevor er tatsächlich analysiert und ausgeführt wird. Zum Beispiel:
console.log (add (1,2)); // "3" console.log (sub (5,3)); // "unerwartete Kennung", Fehlerfunktion add (a1, a2) {return a1+a2; } var sub = function (a1, a2) {return a1-a2; }Die erste Aussage kann normal ausgeführt werden. Bei der Bewertung des Codes deklariert die JavaScript -Engine Funktionen für den ersten Durchgang und platziert sie über einen Prozess, der als Funktionserklärung bezeichnet wird. Das heißt, während der Erstellungsstufe der Ausführungsumgebung (die Funktion wird aufgerufen, aber keine Ausführung begonnen) wird die Funktionserklärung "Hosting" sein. Selbst wenn der Code, der eine Funktion deklariert, hinter dem Code steckt, der ihn aufruft, hebt die JavaScript -Engine die Funktionserklärung an die Spitze. Wenn die Funktionserklärung jedoch in einen Funktionsausdruck geändert wird, wird während der Ausführung ein Fehler gemeldet. Der Grund dafür ist, dass vor der Ausführung der Anweisung, in der sich die Funktion befindet, das variable U -Boot keine Verweise auf die Funktion enthält. Das heißt, das variable Sub wird während der Codeausführungsphase zugewiesen. Mit Ausnahme der oben genannten Unterschiede ist in anderen Aspekten die Syntax von Funktionserklärungen und Funktionsausdrücken äquivalent.
• Beeinflussen keine variablen Objekte
var sub = function f (a1, a2) {console.log (typeof f); // "Funktion" return a1-a2; } console.log (typeof f); // "Uncortn ReferenceError: F ist nicht definiert (...)"Aus dem obigen Beispiel können wir sehen, dass der Funktionsname F nur im Funktionsobjekt verwendet werden kann und der Funktionsname des Funktionsausdrucks im Variablenobjekt nicht vorhanden ist.
Szenarien verwenden
Es gibt viele Nutzungsszenarien für Funktionsausdrücke. Im Folgenden wird hauptsächlich die Anwendungen der Funktionsrekursion und der Codemodularität beschrieben.
• Funktionsrekursion
Siehe das folgende Beispiel:
Funktionsfaktor (num) {if (num <= 1) {return 1; } else {return num * factorial (num - 1); }}Dies ist eine klassische faktorielle Funktion, aber ein Problem in diesem Beispiel ist, dass der Funktionsname -Faktor eng mit der Funktionskörper verbunden ist. Wenn Sie die folgende Anweisung ausführen, erhalten Sie einen Fehler:
var AnotherFactorial = Factorial; factorial = null; console.log (ein weiteres Faktorial (5)); // "Uncortn TypeError: Factorial ist keine Funktion"
Der Grund für einen Fehler ist, dass die faktorielle Funktion innerhalb der Funktionsbehörde aufgerufen wird und die Verweise auf die Funktion durch das variable Fakultät abgebrochen wurde, sodass ein Fehler gemeldet wird. Die Lösung für diese Situation kann im Allgemeinen mit Argumenten gelöst werden.
Funktionsfaktor (num) {if (num <= 1) {return 1; } else {return num * argumente.callee (num - 1); }}Auf diese Weise können Sie das richtige Ergebnis erzielen, indem Sie hier eine andere Faktorialfunktion ausführen. Im strengen Modus "Strict", Argumente.Callee kann jedoch nicht über Skripte zugegriffen werden. Auf diese Weise können Sie dieses Problem anhand von Funktionsausdrücken unter Verwendung von Funktionsausdrücken lösen:
var factorial = (Funktion f (num) {if (num <= 1) {return 1;} else {return num * f (num - 1);}}); console.log (faktorial (5)); // "120"• Codemodularität
In JavaScript gibt es keinen Umfang auf Blockebene, aber wir können Funktionsausdrücke verwenden, um den JavaScript-Code zu modularisieren. Der modulare Code kann Details zusammenfassen, die dem Benutzer nicht bekannt sein müssen, und sie nur den relevanten Schnittstellen des Benutzers auszusetzen und gleichzeitig die Verschmutzung der globalen Umgebung zu vermeiden, z. B.:
var person = (function () {var _name = ""; return {getName: function () {return _name;}, setName: function (newname) {_name = newname;}};} ()); Person.SetName ("John"); Person.getName (); //"John"In diesem Beispiel wird ein anonymer Funktionsausdruck erstellt, der die eigenen privaten Variablen und Funktionen des Moduls enthält. Das Ausführungsergebnis dieses Funktionsausdrucks gibt ein Objekt zurück, das die vom Modul ausgesetzte öffentliche Schnittstelle dem Benutzer enthält. Es gibt viele spezifische Formen der Codemodularität. In einigen häufig verwendeten JavaScript -Bibliotheken werden beispielsweise in der Regel sofortige Ausführungsfunktionen verwendet, die ähnlich wie die folgenden Beispiele verwendet werden:
(function () {var _name = ""; var root = this; var person = {getName: function () {return _name;}, setName: function (newname) {_name = newname;}}; root.person = person;} .call (this)); Person.SetName ("John"); Person.getName (); //"John"Diese Methode verwendet direkt das Objekt, das die öffentliche Schnittstelle des Moduls als Attribut des globalen Objekts enthält, damit das Attribut des globalen Objekts an anderer Stelle verwendet werden kann.
Die obigen Ausdrücke von Klischees JavaScript -Funktion sind alle Inhalte, die ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.