Maison > Article > interface Web > Chaîne de portée JavaScript et environnement d'exécution
Les concepts de portée, de chaîne de portée, d'environnement d'exécution, de pile d'environnement d'exécution et cela sont très importants en JavaScript, je les confonds souvent
<script type="text/javascript"> function test1(){ a = 1;//全局变量,只有在当前函数运行时,才有效 } test1(); console.log(a);//1 注意test1函数必须运行,不然找不到a </script>
<script type="text/javascript"> var b = 1;//全局变量 console.log(b === window.b); //true 全局变量可以当做window对象的属性用,他们是一样的; </script>
<script type="text/javascript"> var c = 1;//全局变量// console.log(d);//ReferenceError: d is not defined 引用错误,当前作用域就是最外层作用域,依然找不到d function test2(d){ console.log(c); //1 全局变量,哪都可以访问;(先找当前作用域,找不到,就向外层作用域找,直到window最外层,找到了) console.log(d);//3 形参是局部变量,只有当前作用域下可以访问 } test2(3); </script>Chaîne de portées La chaîne de portées dépend de la position où la fonction est déclarée. Lors de l'analyse de l'identifiant, elle démarre à partir de la portée actuelle. ne peut pas être trouvé dans la portée actuelle, le moteur continuera à chercher dans la portée externe imbriquée jusqu'à ce qu'il trouve la variable ou atteigne la portée la plus externe (c'est-à-dire la portée globale
Son itinéraire a été déterminé et n'a rien); à voir avec l'endroit où la fonction s'exécute
<script type="text/javascript"> var a = 1; var b = 2; var c = 3; var d = 4; function inner(d) {//它的作用域链是inner---全局 var c = 8; console.log(a);//1 当前作用域找不到a,去全局作用域找到了a=1 console.log(b);//2 当前作用域找不到b,去全局作用域找到了b=2 console.log(c);//8 当前作用域找到了c=8 console.log(d);//7 当前作用域找到了d=7,形参也是局部作用域 // console.log(e);//ReferenceError: e is not defined 引用错误,找不到e, 它的作用域链是inner---全局 console.log(a+b+c+d);//18 } function outter(e) { var a = 5;//inner()的作用域链是inner---全局,所以这个a相当于无效 var b = 6;//inner()的作用域链是inner---全局,所以这个a相当于无效 inner(7); } outter(999);//这个999无效,里面的e根本找不到 </script>
<script type="text/javascript"> var a = 'Lily'; var b = 'Lucy'; function outer() { var b = 'Jesica'; var c = 'Susan'; function inner(c) { console.log(a);//Lily console.log(window.b);//Lucy console.log(b);//Jesica console.log(c);//Jenifer } inner('Jenifer'); } outer(); </script>
) qui enregistre toutes les variables et données accessibles à la fonction (c'est-à-dire toutes les données et variables de la chaîne de portée de la fonction). Notre code ne peut pas y accéder, il est utilisé par le moteur ; Pile d'environnement d'exécution Lorsque l'exécution entre dans une fonction, l'environnement d'exécution de la fonction sera poussé dans une pile. Une fois la fonction exécutée, la pile supprime son environnement d'exécution, les variables et les données qu'elle contient seront marquées et effacées, attendra le garbage collection, puis rendra le contrôle à l'environnement d'exécution précédent. L'exécution dans le programme javascript est contrôlée par ce mécanisme ;
Il convient de noter que si l'environnement d'exécution actuel (qui stocke les données et les variables dans la chaîne de portée actuelle) ne trouve pas la variable, alors elle est nécessaire pour trouver la variable. Non, il ne recherchera pas l'environnement d'exécution précédent, qui est différent de la chaîne de portée
L'ordre d'exécution du code n'est pas tout ligne par ligne, mais le ordre d'appel de la fonction. Connexe :
Le code entre dans l'environnement d'exécution global et l'environnement d'exécution global est placé dans la pile d'environnementExécutez la ligne 20, appelez la fonction external(999), puis entrez dans l'environnement d'exécution de la fonction external(999), déclarez la promotion et transmettez le paramètre réel 999 au paramètre formel e ; Deux environnements d'exécution, external(999) est l'environnement d'exécution actuel
exécute la ligne 16, attribue a=5 puis attribue b=6 à la ligne 17 ;
On peut dire que nous utilisons globales ; variables à l'intérieur de la fonction. Une opération multi-portée. Si une valeur multi-portée est utilisée plusieurs fois dans la fonction, nous la stockons dans une variable locale, ce qui peut améliorer les performances.
Ce 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!