闭包就是能够读取其他函数内部变量的函数。
f2函数,就是闭包。
可以把闭包简单理解成“定义在一个函数内部的函数”。
function f1() { n = 999; function f2() { alert(n); } return f2; } var result = f1(); result(); // 999
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
function a() { var i = 0; function b() { alert(++i); } return b; } var c = a(); c();
作用
它的最大用处有两个:
一个是前面提到的可以读取函数内部的变量,
另一个就是让这些变量的值始终保持在内存中。
注意点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,
否则会造成网页的性能问题,在IE中可能导致内存泄露。
解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。
所以,如果你把父函数当作对象(object)使用,
把闭包当作它的公用方法(Public Method),
把内部变量当作它的私有属性(private value),这时一定要小心,不要随便。