function a() {
var i = 0;
function b() {
alert(++i);
}
return b;
}
var c = a();
c();
这段代码有两个特点:
函数b嵌套在函数a内部;
函数a返回函数b。
闭包有什么作用和效果?
简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。
在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
那么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。函数a和b互相引用但又不被外界打扰(被外界引用),因此a执行完后,函数a和b就会被GC回收。