一,作用域链简介
当代码在一个环境中执行时,会创建变量对象的一个作用域链。内部环境可以通过作用域链访问所有外部环境,但外部环境不能访问内部环境的任何变量和函数。
二,作用域链
- 作用域链的前端,始终都是当前执行的代码所在环境的变量对象
- 作用域链中的下一个对象来自于外部环境,而在下一个变量对象则来自下一个外部环境,一直到全局执行环境。
- 全局执行环境的变量对象始终都是作用域链上的最后一个对象
三,代码演示
var a = 100;
var b = function(){}
console.log(a);//100
function arr(){
console.log(b);//function(){}
c = 1;
function arr1(){
console.log(c);//1
d = 5 + c;
function arr2(){
console.log(d);//6
}
arr2();
}
arr1();
}
arr();
1,图解
2,意解
GO{
a : 10,
b : function ...
arr : function ...
}
arrAO{
c : 1,
arr1: function...,
}
arr1AO{
d : 6;
arr2: function...
}
arr2AO{
}
arr defined arr.[[scope]] 0 : GO {} 可访问变量a
arr doing arr.[[scope]] 0 : arrAO{} 可以用自己的变量c
1 : GO {}
arr1 defined arr1.[[scope]] 0 : arrAO{} 可以访问到c
1 : GO{}
arr1 doing arr1.[[scope]] 0 : arr1AO{}
1 : arrAO{} 可以访问到c
2 : GO{}