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回收。