function outer(){
var n=0;
return function inner(){return ++n;}
}
var getNum=outer();
console.log(getNum()); //输出1
n=0;//创建了全局变量n
var n=0;
return function inner(){return ++n;}
}
var getNum=outer();
console.log(getNum()); //输出1
n=0;//创建了全局变量n
console.log(getNum()); //输出2
闭包的三大定义:
1、函数的嵌套;
2、里层函数调用外层函数的局部变量;
3、 内层函数被返回到外部,在外部调用。
何时使用闭包:即要重用变量,又要保护变量不被污染
缺点:占用更多内存空间——因为外层函数的活动对象无法释放。
拿上面的例子来举例:里层函数inner调用了外层函数的局部变量n,并且inner被返回到外部
我的理解是,外层函数的作用就是创建一个不容易被串用的局部变量,从而达到保护变量的作用,而对于要实行的方法逻辑则主要有里层函数实行。由于闭包的特性使得闭包调用结束后,外层函数作用域链的活动对象得不到释放,所以闭包又存在着占用内存空间的缺点