Heim  >  Artikel  >  Web-Frontend  >  Analyse der JS-Funktionsdeklaration und des Funktionsausdrucks

Analyse der JS-Funktionsdeklaration und des Funktionsausdrucks

不言
不言Original
2018-07-14 17:40:561599Durchsuche

Dieser Artikel stellt hauptsächlich die Analyse von Funktionsdeklarationen und Funktionsausdrücken in js vor. Jetzt kann ich ihn mit Ihnen teilen

1

In JavaScript haben wir die folgenden zwei Möglichkeiten, Funktionen zu definieren:

Funktionsdeklaration

  function say(){
     console.log('函数声明');
  }

Funktionsausdruck

   var say = function(){
      console.log('函数表达式');
   }
2. Beispielanalyse

Bei 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:1
2. 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. Zusammenfassung

1. 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

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe es Wird für das Lernen aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website!

Verwandte Empfehlungen:

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!

Stellungnahme:
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