作用域链和闭包
作用域链
var a = 1;
function fun() {
var b = 2;
function ff() {
console.log(a);
console.log(b);
console.log(a + b);
}
return ff
}
var c = fun()
c() // 1 2 3
当fun函数执行的时候,会先进行词法分析
- 声明b=undefined
- 声明ff(){console.log(a);console.log(b);console.log(a + b);}
然后执行
- 返回ff的时候,ff函数就继承了父函数,也就是fun函数的作用域链,再加上自己的活动对象,就形成了自己的作用域链
所以,在c函数执行的时候,就能访问到变量a和变量b
闭包
上面的ff函数就是闭包,在函数fun的作用域外面访问到内部的变量值
参考资料
- 阮一峰博文《学习Javascript闭包(Closure)》