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都是同一个

浙公网安备 33010602011771号