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在内存中的栈去依然保留
使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用域的概念。
特性:
1)函数嵌套函数;
2)函数内部可以使用外部的参数和变量;
3)参数和变量不会被垃圾回收机制回收。