一 .什么叫作用域链?
*作用域链:有多级作用域连续引用新城的链式结构,管控一切变量的使用顺序
(先在自己的AO中找,就延作用域链向父级作用域中去找)
案例函数:
var a = 10;
function fn(){
var b = 10
function fun1(){
console.log©;//undefined
b += 5;
var c = 20;//此处给c赋值
function fun2(){
}
fun2();
}
console.log(b);
fun1();
console.log(b);
}
fn();
利用图形来解析:注:== [[scope]]中存储的是作用域的数组链式结构,且有访问的顺序,越在上的,越先访问==
所以fun在上面代码中访问顺序为:fn–> fun1–>fun2
执行过程:
fn denfined (定义) [scope] 0:GO 此时可以访问到a,b=10
fn doing [ scope]0:fn AO {} 此时可以用的自己的变量b=10
1:GO{}
fun1 defined [scope] 0: fnAO{} 可以访问到b
1 : GO{}
fun1 doing fun1.[[scope]] 0 : fun1AO{}
1 : fnAO{} 可以访问到b
2 : GO{}
注:(先在自己的AO中找,就延作用域链向父级作用域中去找)
.