Heim > Web-Frontend > js-Tutorial > Analyse des Unterschieds zwischen Javascript-Funktionsdeklaration und Funktionsausdruck_Grundkenntnisse

Analyse des Unterschieds zwischen Javascript-Funktionsdeklaration und Funktionsausdruck_Grundkenntnisse

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-05-16 16:29:33
Original
1067 Leute haben es durchsucht

Normalerweise deklarieren wir beim Schreiben von Funktionen in js eine Funktion auf die herkömmliche Weise von function fn () {}. Beim Lesen einiger hervorragender Plug-Ins sehen wir unweigerlich var fn = function () {} Unterschiede zwischen der Erstellung dieser Funktionen? Lassen Sie uns heute im Geiste des Aufbrechens und der Frage nach der Wahrheit über diese faszinierende Funktionsdeklaration sprechen.

Funktionsdeklaration

Beispielcode für die Funktionsdeklaration

Code kopieren Der Code lautet wie folgt:

Funktion fn () {
console.log('fn-Funktionsausführung..');
// Code..
}

Auf diese Weise haben wir eine Funktion namens fn deklariert. Glauben Sie, dass sie ausgeführt wird, wenn Sie sie zusätzlich zu dieser Funktion aufrufen? Oder wird ein Fehler gemeldet?

Code kopieren Der Code lautet wie folgt:
fn(); // Rufen Sie die von uns deklarierte fn-Funktion auf vor fn () { console.log('fn-Funktionsausführung..'); // Code..}

Konsolenausgabe:

Ja, die Fn-Funktion kann zu diesem Zeitpunkt aufgerufen werden. Hier ist eine Zusammenfassung der Gründe.

Zusammenfassung:

1: Zu diesem Zeitpunkt ist die fn-Funktion das Ergebnis der Variablen, die standardmäßig in der Variablen des globalen Kontexts gespeichert wird (kann anhand des Namens der window.function überprüft werden)

 2: Diese Methode ist eine Funktionsdeklaration, die beim Eintritt in die globale Kontextphase erstellt wird. Sie ist bereits während der Codeausführungsphase verfügbar. ps: JavaScript initialisiert die Kontextumgebung (von global → lokal) jedes Mal, wenn eine Methode

eingegeben wird

 3: Es kann sich auf variable Objekte auswirken (nur im Kontext gespeicherte Variablen)

Funktionsausdruck

Beispielcode für einen Funktionsausdruck

Code kopieren Der Code lautet wie folgt:

var fn = function () {
console.log('fn-Funktion [Ausdruck]-Anweisungsausführung..')
// Code..
}

 Auf diese Weise deklarieren wir eine anonyme Funktion und verweisen ihren Verweis auf die Variable fn?

Rufen Sie die durch den Ausdruck oben und unten deklarierte Funktion noch einmal auf, um die Ausgabe auf der Konsole anzuzeigen.

Code kopieren Der Code lautet wie folgt:

// Um ​​die Konsolenausgabe deutlich zu sehen, markieren wir vor und nach jedem Aufruf, um die Lesbarkeit zu erhöhen.
console.log('Vorheriger Anruf gestartet..');
fn();
console.log('Vorheriger Anruf beendet..');
var fn = function () {
console.log('fn-Funktion [Ausdruck]-Anweisungsausführung..')
// Code..
}
console.log('Nachdem der Anruf beginnt..');
fn();
console.log('Nachdem der Anruf beginnt..');

Konsolendruckergebnis:

Sie können sehen, dass, wenn der Code ausgeführt wird und die Funktion fn() zum ersten Mal aufgerufen wird, Folgendes angezeigt wird: fn ist keine Funktion (fn ist keine Methode) und der Vorgang wird beendet, wenn ein Fehler auftritt angetroffen.

Dies zeigt, dass beim ersten Aufruf von fn() die Variable var fn nicht als Attribut des globalen Objekts vorhanden ist und der von fn referenzierte anonyme Funktionskontext nicht initialisiert wurde, sodass der vorherige Aufruf fehlgeschlagen ist .

Code kopieren Der Code lautet wie folgt:

// Kommentieren Sie nun die vorherige Aufruflogik aus und sehen Sie sich dann die Konsolenausgabe an
// console.log('Vorheriger Anruf gestartet..');
// fn();
// console.log('Vorheriger Anruf beendet..');
var fn = function () {
console.log('fn-Funktion [Ausdruck] deklariert die Ausführung..')
// Code..
}
console.log('Der Anruf beginnt später..');
fn(); // Wird nach dem Ausdruck
aufgerufen console.log('Der Anruf beginnt später..');

Konsolendruckergebnis:

Es ist ersichtlich, dass es möglich ist, nach der Ausdrucksfunktion aufzurufen. Fassen wir zusammen, warum?

Zusammenfassung:

1: Erstens existiert die Variable selbst nicht als Funktion, sondern als Referenz auf eine anonyme Funktion (Werttypen sind keine Referenzen)

2: Während der Codeausführungsphase, wenn der globale Kontext initialisiert wird, existiert er nicht als globales Attribut, sodass keine Verschmutzung variabler Objekte verursacht wird

3: Diese Art der Deklaration ist in der Plug-in-Entwicklung allgemein üblich und kann auch als Aufruf einer Callback-Funktion in einem Abschluss

verwendet werden

 Funktion fn () {} ist also nicht gleich var fn = Funktion () {} Sie sind im Wesentlichen unterschiedlich.

Das Obige ist der gesamte Inhalt dieses Artikels und der Vergleich ist auch sehr klar. Freunde, Sie müssen ihn sorgfältig lesen

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage