Maison >interface Web >js tutoriel >Analyse du principe de précompilation JavaScript

Analyse du principe de précompilation JavaScript

黄舟
黄舟original
2017-02-28 14:28:421676parcourir

J'ai passé beaucoup de temps aujourd'hui à revoir la portée, la précompilation, etc.

J'ai lu beaucoup d'articles de blog et ouvert des livres que j'avais lus auparavant (il semble que beaucoup de livres ne parlent pas à propos de la précompilation) )
J'ai découvert que je pensais l'avoir appris clairement au début, mais en fait il y a encore des malentendus
(De nombreux articles de blog sont trompeurs)
J'ai réglé les idées en désordre ce soir
Triez d'abord les pré-compilés Connaissances, j'expliquerai la portée en détail quand j'aurai le temps dans le futur


Tout le monde doit comprendre que cette pré-compilation est différente de la compilation traditionnelle (vous pouvez comprendre que la pré-compilation js est un processus de compilation spécial)
JavaScript est un langage interprété
Puisqu'il s'agit d'un langage interprété, cela signifie compiler une ligne et exécuter une ligne
La compilation traditionnelle passera par de nombreuses étapes. , comme la segmentation de mots, l'analyse et la génération de code
Je vous donnerai plus d'informations quand j'aurai le temps à l'avenir
Laissez-moi partager avec vous ce que je comprends de la pré-compilation JS

Trilogie d'exécution JavaScript

Que fait le moteur js d'exécution de script ?

  1. Analyse syntaxique

  2. Pré-compilation

  3. Interprétation et exécution

Il y a deux étapes avant d'exécuter le code

L'analyse de la syntaxe est très simple, c'est-à-dire que le moteur vérifie votre code pour toute erreur de syntaxe de bas niveau
Explication et exécution, comme son nom l'indique, consiste à exécuter le code
Pré- La simple compréhension de la compilation consiste à ouvrir de l'espace dans la mémoire et à stocker certaines variables et fonctions
Comprendre la pré-compilation est également utile pour que chacun comprenne la portée

Quand la pré-compilation JS a-t-elle lieu

Moi Le malentendu initial s'est également produit ici

Quand la pré-compilation a-t-elle lieu ?
J'espère que vous ne laissez pas le processus en cours ci-dessus vous amener à mal comprendre .
Malentendu selon lequel la précompilation ne se produit qu'avant l'exécution du bloc de code dans le script
Ce n'est pas faux
La précompilation se produit avant l'exécution dans le code du script
Mais la plupart d'entre elles se produiront
se produire avant l'exécution de la fonction

Exemple de précompilation JS

Avant de donner un exemple, réfléchissons à ces concepts :

  • Déclaration de variable var…

  • Fonction de déclaration de fonction…

<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>
Voyons ce que le moteur fait à ce code

  • L'objet global GO (Global Object) (c'est-à-dire l'objet fenêtre familier)

  • Le premier fichier de script est chargé

  • Après le le script est chargé, analysez si la syntaxe est légale

  • Démarrez la pré-compilation


    • Trouver la déclaration de variable, en tant qu'attribut GO, la valeur est affectée à undefined

    • Trouver la déclaration de fonction, en tant qu'attribut GO, la valeur est affectée au corps de la fonction

//伪代码GO/window = {    //页面加载创建GO同时,创建了document、navigator、screen等等属性,此处省略
    a: undefined,
    c: undefined,
    b: function(y){
        var x = 1;
        console.log(&#39;so easy&#39;);
    }
}
  • Interpréter et exécuter le code (jusqu'à ce que la fonction b soit exécutée)

//伪代码
GO/window = {
    //变量随着执行流得到初始化
    a: 1,
    c: function(){
        //...
    },
    b: function(y){
        var x = 1;
        console.log(&#39;so easy&#39;);
    }
}
  • Avant d'exécuter fonction b, la pré-compilation se produit


    • Créer un objet actif AO

    • recherche les paramètres formels et les déclarations de variables, et attribue la valeur à undefined

    • attribue la valeur réelle du paramètre au paramètre formel

    • Trouver la déclaration de fonction et attribuer la valeur au corps de la fonction

//伪代码AO = {    //创建AO同时,创建了arguments等等属性,此处省略
    y: 100,
    x: undefined}
  • Expliquez le code dans la fonction exécutée

  • Après l'exécution du premier fichier de script , chargez le deuxième fichier de script

  • Une fois le deuxième fichier de script chargé, effectuez une analyse syntaxique

  • L'analyse grammaticale est terminée, lancez la pré-compilation


    • Répétez l'étape initiale de pré-compilation...

Tout le monde devrait noter que


Les déclarations de variables et de fonctions se produisent pendant la phase de pré-compilation, il n'y a pas de comportement d'initialisation (affectation) et les fonctions anonymes ne participent pas à la pré-compilation
Seule l'initialisation des variables sera uniquement effectué pendant la phase d'interprétation et d'exécution Eh bien ~ enfin conclure

Résumé

Pré-compilation (avant l'exécution de la fonction)※

Créer un objet AO ( Objet actif)
2. Recherchez les paramètres de fonction et les déclarations de variables dans la fonction. Les noms de paramètres formels et les noms de variables sont utilisés comme attributs de l'objet AO, et la valeur est indéfinie
3. les paramètres sont unifiés et les valeurs réelles des paramètres sont attribuées. Donnez les paramètres formels
4. Recherchez la déclaration de fonction, le nom de la fonction est utilisé comme attribut de l'objet AO et la valeur est la référence de la fonction
.

Précompilé (avant l'exécution du script de bloc de code du script)

1. Recherchez la déclaration de variable globale (y compris les déclarations de variable globale implicites, en omettant les déclarations var), le nom de la variable est un attribut de l'objet global et la valeur n'est pas défini
3. Recherchez la déclaration de fonction, le nom de la fonction est un attribut de l'objet global et la valeur est la référence de la fonction


Comprendre la pré-compilation est très utile pour comprendre des problèmes tels comme comportement d'amélioration, ce pointeur, la portée et les performances

Je résumerai également ces problèmes à l'avenir

Ce qui précède est l'analyse des principes de pré-compilation JavaScript , pour plus de contenu connexe, veuillez prêter attention au Site Web chinois PHP (www.php.cn) !



Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn