JavaScript 作用域、作用域链

[[scope]]:每个JavaScript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供JavaScript引擎存取,[[scope]]就是其中一个.

[[scope]]就是我们说的作用域,其中存储了执行期上下文的集合.

 

作用域链:[[scope]]中存储的执行期上下文的集合,这个集合呈链式链接,我们称之为作用域链.

1 <script>
2        function a(){
3            
4        }
5 
6 //a.[[scope]]
7 
8 </script>

执行期上下文: 函数执行时创建的一个内部对象,定义了函数执行时的环境(GO/AO),函数每次执行,执行期上下文都是独一无二的,函数执行完就会被销毁.

 

查找变量是从作用域链的顶端以此查找.

 

函数被定义时,作用域链包括上级函数的AO和全局GO

 

 

 1 <script>
 2 
 3 function a(){
 4      function b(){
 5            var b = 234;
 6      }
 7      var a = 123;
 8      b();
 9 }
10 
11 var glob = 100;
12 a();
13 
14 </script>

 

a执行创建了b,  b函数被创建时的AO就是引用了函数a执行时的AO , b是站在a的肩膀上看世界 , 创建时获取了a的劳动成果(作用域链).

 

举个例子:

<script>
function a(){
     function  b(){
           function c(){
      
           }
     }
}
a();

</script>

执行时作用域链:

这里所有的aAO都是同一个,所有bAO都是同一个

 

posted @ 2018-04-11 13:19  L柠檬加醋  阅读(167)  评论(0)    收藏  举报