Grund zum Schreiben:
Beim Schreiben von Funktionen in JS deklarieren wir normalerweise eine Funktion in Form der Konventionsfunktion fn () {}. Beim Lesen einiger hervorragender Plug-Ins können wir die Erstellung von Funktionen wie var fn = function () {} erstellen. Was ist der Unterschied zwischen ihnen? Heute werden wir über diese faszinierende Funktionsstörung sprechen, um den Auflauf bis zum Ende zu brechen.
Funktionserklärung
Funktionserklärung Beispielcode
Die Codekopie lautet wie folgt:
Funktion fn () {
console.log ('fn function Execution ..');
// Code ..
}
Auf diese Weise deklarieren wir eine Funktion namens FN. Hier ist ein Gedanke. Glauben Sie, dass es ausgeführt wird, wenn es diese Funktion auffordert? Oder wird ein Fehler gemeldet?
fn (); // Ruf die FN -Funktion, die wir zuvor deklariert haben
Die Codekopie lautet wie folgt:
Funktion fn () {
console.log ('fn function Execution ..');
// Code ..
}
Konsolenausgabeergebnis:
Ja, die FN -Funktion kann zu diesem Zeitpunkt aufgerufen werden. Fassen wir also die Gründe hier zusammen.
Zusammenfassen:
1: Zu diesem Zeitpunkt ist die FN -Funktion das Ergebnis einer Variablen und wird standardmäßig in einer Variablen in einem globalen Kontext gespeichert (kann durch das Fenster überprüft werden. Funktionsname)
2: Diese Methode ist die Funktionserklärung und sie sind bereits verfügbar, wenn sie in die globale Kontextphase eingeben und die Codeausführungsstufe eingeben. PS: JavaScript initialisiert die Kontextumgebung jedes Mal, wenn sie in die Methode eintritt (von global → lokal)
3: Es kann sich auf variable Objekte auswirken (nur die im Kontext gespeicherten Variablen).
Funktionsausdrücke
Beispielcode für Funktionsausdruck
Die Codekopie lautet wie folgt:
var fn = function () {
console.log ('fn function [Expression] deklariert die Ausführung ...'))
// Code ..
}
Also deklarieren wir eine anonyme Funktion und verweisen auf die Variable FN?
Nennen Sie es erneut über und unter den Funktionen, die durch diesen Ausdruck deklariert wurden, um die Ausgabeergebnisse der Konsole zu sehen.
Die Codekopie lautet wie folgt:
// Um die Ausgabe der Konsole klar zu sehen, machen wir vor und nach jedem Aufruf eine Marke, um die Lesbarkeit zu erhöhen.
console.log ('Bevor der Anruf beginnt ...');
fn ();
console.log ('Der vorherige Anruf endet ...');
var fn = function () {
console.log ('fn function [Expression] deklariert die Ausführung ...'))
// Code ..
}
console.log ('Der Anruf beginnt danach ...');
fn ();
console.log ('Der Anruf beginnt danach ...');
Konsolendruckergebnisse:
Sie können sehen, dass, wenn der Code zum ersten Mal ausgeführt wird, wenn die FN () -Funktion aufgerufen wird, die Eingabeaufforderung lautet: FN ist keine Funktion (FN ist keine Methode) und die Operation wird beendet, wenn er auf einen Fehler auftritt.
Dies zeigt, dass bei FN () zum ersten Mal die VAR -FN -Variable nicht als Eigenschaft des globalen Objekts existiert und der von FN verwiesene anonyme Funktionskontext nicht initialisiert wird, sodass der Anruf vor ihm fehlgeschlagen ist.
Die Codekopie lautet wie folgt:
// kommentieren Sie nun zuerst die vorherige Anruflogik und schauen Sie sich die Konsolenausgabe an
// console.log ('Bevor der Anruf beginnt ...');
// fn ();
// console.log ('Der vorherige Anruf endet ...');
var fn = function () {
console.log ('fn function [Expression] deklariert die Ausführung ...'))
// Code ..
}
console.log ('Der Anruf beginnt danach ...');
fn (); // nach dem Ausdruck gerufen
console.log ('Der Anruf beginnt danach ...');
Konsolendruckergebnisse:
Es ist zu sehen, dass es in Ordnung ist, die Ausdrucksfunktion danach aufzurufen. Lassen Sie uns warum zusammenfassen, warum?
Zusammenfassen:
1: Erstens existiert die Variable selbst nicht als Funktion, sondern als Verweis auf eine anonyme Funktion (der Werttyp gehört nicht zu einer Referenz)
2: Während der Code -Ausführungsphase existiert er bei der Initialisierung des globalen Kontextes nicht als globales Attribut, sodass es keine Kontamination von variablen Objekten verursacht.
3: Diese Art von Deklaration ist im Allgemeinen bei der Entwicklung von Plug-Ins üblich und kann auch als Aufruf der Rückruffunktionen in Schließungen verwendet werden.
Die Funktion fn () {} entspricht nicht var fn = function () {}, sie haben wesentliche Unterschiede.