function a(){
var i=0;
function b(){
console.log(i++)
}
return b;
}
var c=a();//这里执行了函数a,返回函数b,因此c为函数b
c();//0,这里调用了函数b
c();//1,因为i仍然保存在a中,而函数b保持着对i的引用,因此i在内存中的栈去依然保留
使用闭包主要是为了设计私有的方法和变量。
优点:可以避免全局变量的污染
缺点:闭包会常驻内存,会增大内存使用量,使用不当容易造成内存泄漏。
特点:
- 函数嵌套函数
- 里边的函数可以使用外部的参数和变量
- 参数和变量不会被垃圾回收机制回收