Heim > Web-Frontend > js-Tutorial > Hauptteil

Analyse des JavaScript-Vorkompilierungsprinzips

黄舟
Freigeben: 2017-02-28 14:28:42
Original
1599 Leute haben es durchsucht

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 >

JavaScript läuft in der Trilogie

Was macht die Skriptausführungs-JS-Engine?

  1. Syntaxanalyse

  2. Vorkompilierung

  3. Interpretation und Ausführung

Es gibt zwei Schritte vor der Ausführung des Codes

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 JS-Vorkompilierung statt

Ich Das ursprüngliche Missverständnis ist auch hier aufgetreten

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

JS-Vorkompilierungsbeispiel

Bevor wir ein Beispiel geben, denken wir über diese Konzepte nach:

  • Variablendeklaration var…

  • Funktionsdeklarationsfunktion…

<script>
    var a = 1;// 变量声明
    function b(y){//函数声明
        var x = 1;
        console.log(&#39;so easy&#39;);
    };    var c = function(){//是变量声明而不是函数声明!!
        //...
    }
    b(100);</script><script>
    var d = 0;</script>
Nach dem Login kopieren
Mal sehen, was die Engine mit diesem Code macht

  • Das globale GO-Objekt (Global Object) (das heißt das bekannte Fensterobjekt)

  • Die erste Skriptdatei wird geladen

  • Nach dem Skript geladen ist, analysieren Sie, ob die Syntax zulässig ist

  • Vorkompilierung starten


    • Variablendeklaration finden, Als GO-Attribut wird der Wert undefiniert zugewiesen

    • Suchen Sie die Funktionsdeklaration, als GO-Attribut wird der Wert dem Funktionskörper zugewiesen

//伪代码GO/window = {    //页面加载创建GO同时,创建了document、navigator、screen等等属性,此处省略
    a: undefined,
    c: undefined,
    b: function(y){
        var x = 1;
        console.log(&#39;so easy&#39;);
    }
}
Nach dem Login kopieren
  • Interpretieren und führen Sie den Code aus (bis Funktion b ausgeführt wird)

//伪代码
GO/window = {
    //变量随着执行流得到初始化
    a: 1,
    c: function(){
        //...
    },
    b: function(y){
        var x = 1;
        console.log(&#39;so easy&#39;);
    }
}
Nach dem Login kopieren
  • Vor der Ausführung Funktion b, Vorkompilierung erfolgt


    • Aktives AO-Objekt erstellen

    • sucht nach formalen Parametern und Variablendeklarationen und weist den Wert undefiniert zu

    • weist den tatsächlichen Parameterwert dem formalen Parameter zu

    • Suchen Sie die Funktionsdeklaration und weisen Sie den Wert dem Funktionskörper zu

//伪代码AO = {    //创建AO同时,创建了arguments等等属性,此处省略
    y: 100,
    x: undefined}
Nach dem Login kopieren
  • Erklären Sie den Code in der ausgeführten Funktion

  • Nachdem die erste Skriptdatei ausgeführt wurde , laden Sie die zweite Skriptdatei

  • Nachdem die zweite Skriptdatei geladen wurde, führen Sie eine Syntaxanalyse durch

  • Die Grammatikanalyse ist abgeschlossen, starten Sie die Vorkompilierung


    • Wiederholen Sie den ersten Vorkompilierungsschritt...

Das sollte jeder beachten


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

Zusammenfassung

Vorkompilierung (vor der Funktionsausführung)※

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

Vorkompiliert (bevor das Skriptcode-Blockskript ausgeführt wird)

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


Das Verständnis der Vorkompilierung ist sehr hilfreich, um Probleme wie z Als Verbesserungsverhalten, dieser Zeiger, Umfang und Leistung

Ich werde diese Probleme in Zukunft auch zusammenfassen

Das Obige ist die Analyse der JavaScript-Vorkompilierungsprinzipien. Für weitere verwandte Inhalte achten Sie bitte auf die PHP chinesische Website (www.php.cn)!



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!