Ich habe heute viel Zeit damit verbracht, den Umfang, die Vorkompilierung usw. zu überprüfen.
Ich habe viele Blogbeiträge gelesen und Bücher geöffnet, die ich zuvor gelesen hatte (es scheint, dass viele Bücher nicht reden über die Vorkompilierung) )
Ich habe herausgefunden, dass ich zunächst dachte, ich hätte es klar gelernt, aber tatsächlich gibt es immer noch einige Missverständnisse
(Viele Blogbeiträge sind irreführend)
Ich habe heute Abend die chaotischen Ideen geklärt
Sortieren Sie zuerst die vorkompilierten Kenntnisse. Ich werde den Umfang ausführlich erläutern, wenn ich in Zukunft Zeit habe.
Jeder muss verstehen, dass sich diese Vorkompilierung von der herkömmlichen Kompilierung unterscheidet (Sie können verstehen). (diese js-Vorkompilierung ist ein spezieller Kompilierungsprozess)
JavaScript ist eine interpretierte Sprache
Da es sich um eine interpretierte Sprache handelt, bedeutet dies, dass eine Zeile kompiliert und eine Zeile ausgeführt wird.
Die herkömmliche Kompilierung erfordert viele Schritte , wie Wortsegmentierung, Analyse und Codegenerierung
Ich werde Ihnen in Zukunft weitere Informationen geben, wenn ich Zeit habe.
Lassen Sie mich mit Ihnen teilen, was ich über JS-Vorkompilierung verstehe >
Die Syntaxanalyse ist sehr einfach, das heißt, die Engine prüft Ihren Code auf etwaige Syntaxfehler auf niedriger Ebene
Erklärung und Ausführung, wie der Name schon sagt, besteht darin, den Code auszuführen
Vor- Das einfache Verständnis der Kompilierung besteht darin, etwas Platz im Speicher zu öffnen und einige Variablen und Funktionen zu speichern
Das Verständnis der Vorkompilierung ist auch hilfreich, damit jeder den Umfang versteht
Wann findet die Vorkompilierung statt?
Ich hoffe, Sie lassen sich durch den oben genannten laufenden Prozess nicht zu Missverständnissen verleiten .
Missverständnis, dass die Vorkompilierung nur erfolgt, bevor der Codeblock im Skript ausgeführt wird
Das ist nicht falsch
Die Vorkompilierung erfolgt zwar vor der Ausführung im Skriptcode
Aber das meiste wird passieren
treten vor der Funktionsausführung auf
<script> var a = 1;// 变量声明 function b(y){//函数声明 var x = 1; console.log('so easy'); }; var c = function(){//是变量声明而不是函数声明!! //... } b(100);</script><script> var d = 0;</script>
//伪代码GO/window = { //页面加载创建GO同时,创建了document、navigator、screen等等属性,此处省略 a: undefined, c: undefined, b: function(y){ var x = 1; console.log('so easy'); } }
//伪代码 GO/window = { //变量随着执行流得到初始化 a: 1, c: function(){ //... }, b: function(y){ var x = 1; console.log('so easy'); } }
//伪代码AO = { //创建AO同时,创建了arguments等等属性,此处省略 y: 100, x: undefined}
Variablendeklarationen und Funktionsdeklarationen erfolgen während der Vorkompilierungsphase, es gibt kein Initialisierungsverhalten (Zuweisung) und anonyme Funktionen nehmen nicht an der Vorkompilierung teil
Nur die Variableninitialisierung erfolgt wird während der Interpretations- und Ausführungsphase durchgeführt Nun ~ zum Abschluss
1. AO-Objekt erstellen ( Aktives Objekt)
2. Finden Sie die Funktionsparameter und Variablendeklarationen innerhalb der Funktion. Die formalen Parameternamen und Variablennamen werden als Attribute des AO-Objekts verwendet, und der Wert ist undefiniert
3. Die tatsächlichen Parameter Parameter werden vereinheitlicht und die tatsächlichen Parameterwerte werden zugewiesen Geben Sie die formalen Parameter an
4 Suchen Sie nach der Funktionsdeklaration, der Funktionsname wird als Attribut des AO-Objekts verwendet und der Wert ist die Funktionsreferenz
1. Suchen Sie die globale Variablendeklaration (einschließlich impliziter globaler Variablendeklarationen, ohne var-Deklaration), den Variablennamen, ein Attribut des globalen Objekts, und den Wert ist undefiniert
3. Finden Sie die Funktionsdeklaration, der Funktionsname ist ein Attribut des globalen Objekts und der Wert ist die Funktionsreferenz
Ich werde diese Probleme in Zukunft auch zusammenfassen