[[scope]]:每一个JavaScript函数都是一个对象,对象中有些属性咱们能够访问,但有些不能够,这些属性仅供JavaScript引擎存取,[[scope]]就是其中一个.函数
[[scope]]就是咱们说的做用域,其中存储了执行期上下文的集合.spa
做用域链:[[scope]]中存储的执行期上下文的集合,这个集合呈链式连接,咱们称之为做用域链.code
1 <script> 2 function a(){ 3 4 } 5 6 //a.[[scope]] 7 8 </script>
执行期上下文: 函数执行时建立的一个内部对象,定义了函数执行时的环境(GO/AO),函数每次执行,执行期上下文都是独一无二的,函数执行完就会被销毁.对象
查找变量是从做用域链的顶端以此查找.blog
函数被定义时,做用域链包括上级函数的AO和全局GOip
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的劳动成果(做用域链).作用域
举个例子:io
<script> function a(){ function b(){ function c(){ } } } a(); </script>
执行时做用域链:function
这里全部的aAO都是同一个,全部bAO都是同一个class