1.闭包,是能够读取其他函数内部变量的函数,但一般能读取js函数内部变量的函数,都在其内部,所以,也可以简单理解成,定义在一个函数内部的函数,如:
function f1(){
n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
,以上例子中的f2(),函数,就可以大致理解成一个闭包。
注意:以上f1()函数中,n=999,没有用var声明,故其实是一个全局变量,不要简单理解成一个局部变量或者写错了什么的。。。
2.闭包在运行过程中,由于闭包函数被玩不函数所引用,而闭包函数本身又依赖于其母函数,因此闭包中的值,将一直存在于内存中,不会被javascript的GC垃圾回收机制所回收。js的垃圾回收机制,是在js中的函数在没有被引用,或两个函数之间互相有引用,但没有被第三个函数引用时,将会被垃圾回收机制回收销毁,而在这里,有三个函数之间互相关联或引用了,所以他们都不会被GC回收销毁。