Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Analyse des JavaScript-Vorkompilierungsprozesses (Codebeispiel)

Detaillierte Analyse des JavaScript-Vorkompilierungsprozesses (Codebeispiel)

不言
不言nach vorne
2019-01-24 09:15:192562Durchsuche

Dieser Artikel bietet Ihnen eine detaillierte Analyse (Codebeispiel) des JavaScript-Vorkompilierungsprozesses. Ich hoffe, dass er für Freunde hilfreich ist.

Jeder weiß, dass es sich bei JavaScript um eine interpretierte Sprache handelt. Warum gibt es also eine Vorkompilierung? Tun? ? Werfen wir heute einen Blick darauf.

1-JavaScript-Lauftrilogie

  1. Syntaxanalyse

  2. Vorkompilierung

  3. Interpretation und Ausführung

Die Grammatikanalyse ist sehr einfach, das heißt, die Engine überprüft Ihren Code auf etwaige Syntaxfehler auf niedriger Ebene Unter „Vorkompilierung“ versteht man einfach Platz im Speicher, um einige Variablen und Funktionen zu speichern.

Wann findet die Vorkompilierung statt ? Missverständnis, dass die Vorkompilierung nur im Code innerhalb des Skripts erfolgt. Es ist nichts Falsches daran, dass die Vorkompilierung vor der Ausführung im Skriptcode erfolgt, aber das meiste davon geschieht vor der Funktionsausführung

3-Beispiel Analyse

Lassen Sie es uns zuerst unterscheiden und verstehen. Schauen wir uns diese beiden Konzepte an: Variablendeklaration var... Funktionsdeklaration function(){}

<script>
var a = 1;
console.log(a);
function test(a) {
  console.log(a);
  var a = 123;
  console.log(a);
  function a() {}
  console.log(a);
  var b = function() {}
  console.log(b);
  function d() {}
}
var c = function (){
console.log("I at C function");
}
console.log(c);
test(2);
</script>

Der Analyseprozess ist wie folgt:

    Das globale GO-Objekt wird erstellt, wenn die Seite generiert wird (globales Objekt) (d. h. Fensterobjekt);
  1. Die erste Skriptdatei wird geladen;
  2. Analysieren Sie nach dem Laden, ob die Syntax zulässig ist.
  3. Starten Sie die Vorkompilierung, um Variablendeklarationen zu finden GO-Attribute, der Wert wird undefiniert zugewiesen; Funktionsdeklarationen werden als GO-Attribute zugewiesen, der Wert wird dem Funktionskörper zugewiesen
  4. Vorkompilierung
//抽象描述
    GO/window = {
        a: undefined,
        c: undefined,
        test: function(a) {
            console.log(a);
            var a = 123;
            console.log(a);
            function a() {}
            console.log(a);
            var b = function() {}
            console.log(b);
            function d() {}
        }
    }
Interpretiert der Ausführungscode (bis die Anweisung, die Funktion test(2) aufruft, ausgeführt wird)
//抽象描述
    GO/window = {
        a: 1,
        c: function (){
            console.log("I at C function");
        }
        test: function(a) {
            console.log(a);
            var a = 123;
            console.log(a);
            function a() {}
            console.log(a);
            var b = function() {}
            console.log(b);
            function d() {}
        }
    }
Vorkompilierung erfolgt vor der Ausführung von Funktion test()
    Erstellen Sie ein aktives AO-Objekt (Aktives Objekt);
  1. Formale Parameter und Variablendeklarationen finden und den Wert undefiniert zuweisen; Der formale Parameter
  2. sucht nach der Funktionsdeklaration und der Wert wird dem Funktionskörper
  3. den beiden Zeichen 1 und 2 zugewiesen oben vor der Vorkompilierung Die Schritte sind wie folgt:
  4. //抽象描述
        AO = {
            a:undefined,
            b:undefined,
        }

    Der dritte Schritt der Vorkompilierung ist wie folgt:

    //抽象描述
            AO = {
                a:2,
                b:undefined,
            }
  5. Der vierte Schritt der Vorkompilierung ist wie folgt:
//抽象描述
    AO = {
        a:function a() {},
        b:undefined
        d:function d() {}
    }
Der folgende Prozess ändert sich beim Ausführen der test()-Funktion:
//抽象描述
    AO = {
        a:function a() {},
        b:undefined
        d:function d() {}
    }
    --->
    AO = {
        a:123,
        b:undefined
        d:function d() {}
    }
    --->
    AO = {
        a:123,
        b:function() {}
        d:function d() {}
    }
Ausführungsergebnis:
Hinweis:

Variablendeklaration und Funktionsdeklaration erfolgen in der Vorkompilierungsphase, kein Initialisierungsverhalten (Zuweisung), anonyme Funktionen nehmen nicht an der Vorkompilierung teil; die Variableninitialisierung erfolgt nur während der Interpretations- und Ausführungsphase; >Vorkompilierung (vor Funktionsausführung)Detaillierte Analyse des JavaScript-Vorkompilierungsprozesses (Codebeispiel)

Erstellung eines AO-Objekts (aktives Objekt)

sucht nach Funktionsparametern und Variablendeklarationen innerhalb der Funktion . Die formalen Parameternamen und Variablennamen werden als Attribute des AO-Objekts verwendet, und der Wert ist undefiniert
  1. Die tatsächlichen Parameter und formalen Parameter sind vereinheitlicht und die tatsächlichen Parameterwerte werden den formalen Parametern zugewiesen

  2. , um die Funktionsdeklaration zu finden, der Funktionsname wird als Attribut des AO-Objekts verwendet und der Wert ist die Funktionsreferenz

  3. Vorkompilierung (bevor das Skriptcodeblockskript ausgeführt wird)

  4. Suchen Sie nach globalen Variablendeklarationen (einschließlich impliziter globaler Variablendeklarationen, ohne var-Deklarationen), Variablennamen und Attributen des globalen Objekts, der Wert ist undefiniert

Suchen Sie die Funktionsdeklaration, der Funktionsname wird als Attribut des globalen Objekts verwendet, der Wert ist die Funktionsreferenz
  1. Vorkompilierte Zusammenfassung

  2. Zwei kleine Regeln für die Vorkompilierung

Die allgemeine Verbesserung von Funktionsdeklarationen - (Um genau zu sein, unabhängig von Funktionsaufrufen und -deklarationen. Unabhängig davon, ob die Position davor oder danach liegt, verschiebt das System die Funktionsdeklaration immer an den Anfang des Aufrufs.)
  • Variablendeklarationsförderung - (Um genau zu sein, unabhängig davon, ob sich die Position des Variablenaufrufs und der Deklaration davor oder danach befindet, verschiebt das System die Deklaration immer vor dem Aufruf. Beachten Sie, dass es sich nur um eine Deklaration handelt, sodass der Wert undefiniert ist.)
  1. Vorkompiliertes Vorspiel
  2. imply global bedeutet eine beliebige Variable. Wenn ihr ein Wert zugewiesen wird, ohne dass sie deklariert wird, gehört diese Variable die globale Variable. (Die globale Domäne ist Window)
  • Alle deklarierten globalen Variablen sind Eigenschaften von window var a = 12;
    1. Die Vorkompilierung der Funktion erfolgt unmittelbar vor der Ausführung der Funktion.

    Das obige ist der detaillierte Inhalt vonDetaillierte Analyse des JavaScript-Vorkompilierungsprozesses (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen