通过上面作用域链就可以看出 外函数为什么不能访问内层函数的变量(b doing作用域链里面没有c AO 访问不了cAO)
把函数保存到外部的做法 -----闭包
function a(){
var num = 100;
function b(){
num++
console.log(num)
}
return b
}
var temp = a()
temp() //101
temp() //102
temp() //103
上例: a执行完之后b被定义 ,在原有a的基础上保存了a的AO里面的东西,赋值给变量temp ,temp每次执行一次就是执行b函数一次,执行完就销毁b的BO,每次执行产生新的BO,执行完就只消耗BO不销毁AO(所以用的过多闭包有可能会造成内存溢出)
function a(){
var num = 100;
function b(){
num++
console.log(num)
}
function c(){
num--
console.log(num)
}
return [b,c]
}
var temp = a()
temp[0]() //101
temp[1]() //100