一、概念
定义在函数内部的函数,通俗理解就是能够读取其他函数内部变量的函数。
二、用途
闭包的用途:其一就是读取函数内部的变量;其二就是让这些变量始终保持在内容中。
三、实例剖析
function f1(){
var n=999;
ndd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result();//999
ndd();
result();//1000
该例子中,result实际上就是闭包了f2函数,该函数工运行了两次,第一次运行后999,第二次运行结果是1000,这说明函数f1的局部变量n一直在内存当中,没有在函数f1被用结束自动清除。原因在于f1是f2的父函数,而f2被赋值给一个全局变量,这到这f2始终保存在内存当中,而f2的存在依赖于函数f1,因此f1始终在内存中,在调用结束后不会被垃圾回收机制回收。
ndd这一行前边并没有加var这个关键词,因此ndd是一个全局变量,而且ndd本身是一个函数,它也是个闭包,所以ndd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。
四、使用闭包注意点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
网友评论