Maison >interface Web >Questions et réponses frontales >Qu'est-ce que la précompilation en javascript
En JavaScript, la pré-compilation est une opération effectuée avant l'exécution du code. Elle avancera à l'avance les déclarations de variables et de fonctions, et les placera dans les objets créés selon certaines règles.
L'environnement d'exploitation de ce tutoriel : système Windows 10, JavaScript version 1.8.5, ordinateur Dell G3.
JS exécutant la trilogie
1. Analyse de la syntaxe : avant que le moteur js n'analyse le code js, il analysera l'intégralité du texte pour trouver des erreurs de syntaxe de bas niveau, telles que des accolades mal écrites. .
2. Pré-compilation. Toute grammaire et instructions seront converties en objets, GO (Global Object), AO (Active Object). Le code est placé dans GO et AO selon certaines règles. et compilation d'une ligne Exécuter une ligne Lorsqu'il n'y a aucun problème avec l'analyse syntaxique et que l'étape de pré-compilation est terminée, l'exécution du code commence.
La pré-compilation est une opération effectuée avant le code JavaScript pour faire avancer les déclarations de variables et les déclarations de fonctions. Ces codes sont placés dans les objets créés selon certaines règles.
Processus de pré-compilation :
Pré-compilation de la fenêtre GO
1. Créez un objet GO au moment de l'exécution de la balise de script
2 Recherchez la déclaration de variable. Le nom de la variable est utilisé comme nom d'attribut de. l'objet GO et la valeur n'est pas définie.
3. Recherchez la déclaration de fonction. Le nom de la fonction est utilisé comme nom d'attribut de l'objet GO, et la valeur est le corps de la fonction. Si le nom de la fonction est le même que le nom de la variable, remplacez directement la fonction
AO. précompilation
1. Créez un AO au moment où la fonction est exécutée Objet
2, recherchez les paramètres réels et les paramètres formels, ajoutez les paramètres formels à l'objet comme nom d'attribut de l'objet AO, et la valeur est. le paramètre réel. Il convient de noter que la déclaration de fonction n'est pas appelée une variable. S'il n'y a pas de valeur réelle de paramètre, elle n'est pas définie.
3. Recherchez la déclaration de la variable. Le nom de la variable est utilisé comme nom d'attribut de l'objet AO et la valeur n'est pas définie. Si le nom de la variable et le nom du paramètre formel sont identiques, ne vous inquiétez pas.
4. Recherchez la déclaration de fonction. Le nom de la fonction est utilisé comme nom d'attribut de l'objet AO, et la valeur est le corps de la fonction. Si le nom de la fonction est le même que le nom de la variable, écrivons-le directement. un morceau de code pour présenter brièvement le processus de précompilation de la fonction Yiha
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 Tout d'abord, un objet AO sera créé avant d'exécuter fun.
funAO{ }
2. Recherchez les paramètres réels et les paramètres formels, ajoutez les paramètres formels à l'objet comme nom d'attribut de l'objet AO, et la valeur est le paramètre réel. Il convient de noter que la déclaration de fonction n'est pas appelée une variable. . S'il n'y a pas de valeur réelle de paramètre, elle n'est pas définie.
funAO{ a : 1, b : 2 }
3. Recherchez la déclaration de variable. Le nom de la variable est utilisé comme nom d'attribut de l'objet AO et la valeur n'est pas définie. Si le nom de la variable est le même que le nom du paramètre formel, ne vous inquiétez pas
funAO{ a : 1, b : 2 }
4. Recherchez la déclaration de fonction. Le nom de la fonction est utilisé comme nom d'attribut de l'objet AO et la valeur est le corps de la fonction. Si le nom de la fonction est le même que le nom de la variable, remplacez directement
funAO{ a : function a(){}, b : 2 }
Explication et exécution
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);
Il y a aussi une possibilité
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();
C'est le processus d'exécution précompilé !
Recommandations associées :
Tutoriel d'apprentissage JavascriptCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!