In JavaScript ist die Vorkompilierung ein Vorgang, der vor der Ausführung des Codes ausgeführt wird. Dabei werden Variablendeklarationen und Funktionsdeklarationen im Voraus vorangetrieben und diese gemäß bestimmten Regeln in den erstellten Objekten platziert.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, JavaScript-Version 1.8.5, Dell G3-Computer.
JS, das Trilogie ausführt? 1. Syntaxanalyse: Bevor die JS-Engine den JS-Code analysiert, scannt sie den gesamten Text, um Syntaxfehler auf niedriger Ebene zu finden, z. B. falsch geschriebene geschweifte Klammern .
2. Alle Grammatiken und Anweisungen werden nach bestimmten Regeln in GO (Global Object) und AO (Active Object) umgewandelt und Kompilierung einer Zeile. Wenn bei der Syntaxanalyse kein Problem vorliegt und die Vorkompilierungsphase abgeschlossen ist, beginnt die Codeausführung.
Vorkompilierung ist eine Operation, die vor dem JavaScript-Code ausgeführt wird, um Variablendeklarationen und Funktionsdeklarationen voranzutreiben. Diese Codes werden nach bestimmten Regeln in den erstellten Objekten platziert.
Vorkompilierungsprozess:
GO-Fenster-Vorkompilierung
1. Erstellen Sie zum Zeitpunkt der Ausführung des Skript-Tags
2. Der Variablenname wird als Attributname verwendet das GO-Objekt und der Wert ist undefiniert.
3. Suchen Sie nach der Funktionsdeklaration. Der Funktionsname wird als Attributname des GO-Objekts verwendet, und der Wert ist der Funktionsname. Wenn der Funktionsname mit dem Variablennamen übereinstimmt, wird die Funktion
AO direkt überschrieben Vorkompilierung
1. Erstellen Sie zum Zeitpunkt der Ausführung der Funktion ein AO-Objekt
2, suchen Sie nach den tatsächlichen Parametern und formalen Parametern, fügen Sie die formalen Parameter dem Objekt als Attributnamen des AO-Objekts hinzu und erhalten Sie den Wert der eigentliche Parameter Es ist erwähnenswert, dass die Funktionsdeklaration nicht als Variable bezeichnet wird. Wenn kein tatsächlicher Parameterwert vorhanden ist, ist er undefiniert.
3. Suchen Sie die Variablendeklaration. Der Variablenname wird als Attributname des AO-Objekts verwendet und der Wert ist undefiniert. Wenn der Variablenname und der formale Parametername identisch sind, besteht kein Grund zur Sorge.
4. Suchen Sie den Funktionsnamen, der als Attributname des AO-Objekts verwendet wird, und der Wert ist der Funktionsname. Wenn der Funktionsname mit dem Variablennamen übereinstimmt, überschreiben Sie ihn direkt ein Stück Code, um den Prozess der Yiha-Funktionsvorkompilierung kurz vorzustellen
function fun(a,b){ console.log(a); var a = 10; console.log(a); function a(){} console.log(a) a = 1; var b; console.log(b); var b = function(){} console.log(b); } fun(1,2);
1 Zuerst wird ein AO-Objekt erstellt, bevor fun ausgeführt wird.
funAO{ }
2. Finden Sie die tatsächlichen Parameter und formalen Parameter, fügen Sie die formalen Parameter dem Objekt als Attributnamen des AO-Objekts hinzu und der Wert ist der tatsächliche Parameter. Es ist erwähnenswert, dass die Funktionsdeklaration nicht als Variable bezeichnet wird . Wenn kein tatsächlicher Parameterwert vorhanden ist, ist er undefiniert.
funAO{ a : 1, b : 2 }
3. Suchen Sie die Variablendeklaration. Der Variablenname wird als Attributname des AO-Objekts verwendet und der Wert ist undefiniert. Wenn der Variablenname mit dem formalen Parameternamen übereinstimmt, machen Sie sich keine Sorgen
funAO{ a : 1, b : 2 }
4. Suchen Sie nach der Funktionsdeklaration. Der Funktionsname wird als Attributname des AO-Objekts verwendet, und der Wert ist der Funktionskörper. Wenn der Funktionsname mit dem Variablennamen übereinstimmt, überschreiben Sie ihn direkt
funAO{ a : function a(){}, b : 2 }
Erklärung und Ausführung
function fun(a,b){ console.log(a); //往上面的AO对象里面寻找,a的值是function a(){}。 这里就输出function a(){} var a = 10; console.log(a);//上面一行代码把a赋值10 ,所以这里输出10 function a(){} console.log(a)//这里也是10,因为上面函数已经提前了 a = 1; var b; console.log(b);//往上面的AO对象里面寻找,b的值是2。 这里就输出2 var b = function(){}//这里的函数为啥不能提前,因为这里的是一个函数表达式,这个函数没有函数名所以不能提前。 console.log(b);//这里把b赋值function(){},所以这里输出function(){} } fun(1,2);
Auch Es besteht die Möglichkeit
function add(){ //这里的话碰到if判断,for....除了function作用域之外的咱们都得正常分析, //所以这里的值为undefined其实就是var a提前了赋值undefined console.log(a);//这里的输出结果为?undefined if(a){ var a = 10; } //这里是把a的值传入判断里面undefined返回的是false所以进不去,值就不会改变这里还是undefined console.log(a);//undefined } add();
Dies ist der vorkompilierte Ausführungsprozess!
Verwandte Empfehlungen:
Javascript-Lern-TutorialDas obige ist der detaillierte Inhalt vonWas ist Vorkompilierung in Javascript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!