在写上一篇博文的过程中发现了一个小问题,
var a=2;
function f(){
var b=a;
f2=function(y){
return y;
}
}
f();
console.log(f2(b));//not defined 而不是 2
由于f2是闭包,能访问f2作用域链中的变量b,最开始我以为结果会输出2,但结果被打脸。
原因是我弄混了作用域链和函数之间的关系。要理解作用域链,最重要的是下面这句话:
每一段js代码(全局代码或函数)都有一个与之关联的作用域链。
也就是说,作用域链是与代码相关联的,f2(b)是全局代码而不是f2()的代码,因此在执行时所关联的作用域链是全局对象,并不能访问f的活动对象,因此输出b为not defined。