Heim >Web-Frontend >js-Tutorial >Analyse der JS-Funktionsdeklaration und des Funktionsausdrucks
Dieser Artikel stellt hauptsächlich die Analyse von Funktionsdeklarationen und Funktionsausdrücken in js vor. Jetzt kann ich ihn mit Ihnen teilen
Funktionsdeklaration
function say(){ console.log('函数声明'); }
Funktionsausdruck
var say = function(){ console.log('函数表达式'); }2. BeispielanalyseBei der normalen Entwicklung gibt es subtile Unterschiede:
say(); var say = function(){ console.log('函数表达式'); } say(); function say(){ console.log('函数声明'); } say();Sie können zunächst in Ihrem Kopf über die Antwort nachdenken und das Ergebnis ausführen . Es ist:
函数声明 函数表达式 函数表达式Komm schon, lass uns dieses Ergebnis analysieren: 1 Wenn die Funktion say zum ersten Mal aufgerufen wird, wurde der Wert nicht definiert von „Funktionserklärung“ ausgedruckt werden? Der Grund dafür ist, dass es im Javascript-Interpreter einen Mechanismus gibt, durch den Variablendeklarationen hochgestuft werden, was bedeutet, dass
Funktionsdeklarationen an den Anfang des Gültigkeitsbereichs hochgestuft werden, auch wenn der Code steht geschrieben Auch wer ganz hinten steht, wird noch nach vorne befördert. Die mit einem Funktionsausdruck erstellte Funktion wird zur Laufzeit zugewiesen und kann erst aufgerufen werden, wenn die Ausdruckszuweisung abgeschlossen ist.Daher wurde die Funktionsdeklaration zu hochgestuft, auch wenn die Funktion nicht definiert wurde Vorne entspricht der obige Code:
var say; //变量被提升,此时的值为undefined say();// 函数被提升,输出“函数声明” var say = function(){ console.log('函数表达式'); } say(); function say(){ console.log('函数声明'); } say();Aus dem Vergleich der beiden folgenden können wir das Konzept der „Funktionsdeklarationsförderung“ besser verstehen:
1.
var say; console.log(say); say(); function say(){ console.log('函数声明'); } 输出: f say(){ console.log('函数声明'); } 函数声明2.
var say; console.log(say); say(); var say = function(){ console.log('函数表达式'); } 输出: undefined Uncaught TypeError: say is not a function at <anonymous>:3:12. Wenn die Funktion say zum zweiten Mal aufgerufen wird, können wir einfach verstehen, dass das
zu diesem Zeitpunkt das 函数表达式
abdeckt, sodass der „Funktionsausdruck“ ausgegeben wird. Aber beim dritten Aufruf wird bei der Aussage „Funktion“ immer noch „Funktionsausdruck“ gedruckt? ? Warum deckt das folgende 函数声明
nicht das vorhergehende 函数声明
ab? Tatsächlich ist die tatsächliche Ausführungsreihenfolge aufgrund der Heraufstufung von Funktionsdeklarationen zur Laufzeit wie folgt: 函数表达式
function say() { console.log('函数声明'); }//因为函数声明提升,所以在最前面运行了 say(); var say = function() { console.log('函数表达式'); } say(); say();3. Zusammenfassung1. Die Funktionsdeklaration wird während der JS-Analyse heraufgestuft Innerhalb desselben Bereichs kann die Funktion aufgerufen werden, unabhängig davon, wo die Funktionsdeklaration definiert ist.
2. Der Wert des Funktionsausdrucks wird bestimmt, wenn JS ausgeführt wird, und die Funktion kann erst aufgerufen werden, nachdem die Ausdruckszuweisung abgeschlossen ist
So konvertieren Sie ein Pseudo-Array über js in ein Array
So verwenden Sie JS zum Suchen die Array-Differenz-Methode
Das obige ist der detaillierte Inhalt vonAnalyse der JS-Funktionsdeklaration und des Funktionsausdrucks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!