前言:
每一个函数都是一个对象,对象有一些属性仅供javascript引擎存取,[[scope]] 就为其中一个隐形属性,我们称为作用域,存储了函数执行期上下文的集合,
总结:
- 执行期上下文:函数执行时,会创建一个被称为执行期上下文的内部对象(AO),每次执行都为一个独一的AO,执行完毕AO销毁
- 作用域:[[scope]],存储了函数执行期上下文的集合
- 作用域链:[[scope]]中存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这个称为作用域链
- 查找变量:从作用域链的顶端依次向下寻找
分析下面代码的作用域链
function a() {
function b() {
var b = 234;
}
var a = 123;
b();
}
var glob = 100;
a();
1.首先一个全局作用域
a 定义时,a.[[scope]]——> 0:GO{}
a执行时,a.[[scope]]——> 0:aAO{}
1:GO{}
b 定义时,b.[[scope]]——> 0:aAO{}
1:GO{}
b执行时,b.[[scope]]——> 0:bAO{}
1:aAO{}
2:GO{}