js闭包详解
来源:互联网 发布:大数据与量化投资 编辑:程序博客网 时间:2024/06/12 19:24
在
js
中经常会提到闭包这个概念,对于闭包很多人都是模糊的,闭包是个什么东西,闭包有什么用?相信大多数人都知道闭包就是将函数内部的变量暴露出来让外部使用。但是这仅仅是闭包的表像。下面我就说说我对闭包的理解,由于表述有限请读者谅解。
- 首先我们说下
js
中的作用域,大家都知道在js
中函数内部是可以访问外部的变量或方法的,而外部这不可以访问内部的局部变量/方法。那么有时候我们需要使用一个内部方法/变量的时候怎么办呢?我们看下面的代码:
function f1(){ var num=99; addNum=function(){ ++num; } function f2(){ console.log(num); }return f2;}var res = f1();res();//99addNum();var s2 =res();//100
- 从上面的代码可以看出我们利用函数的返回值将内部的一个方法暴露出来,由于内部函数可以引用内部变量,所以我们在接调用
f1()
的时候得到的结果中便可以通过f2()
使用内部的变量。这就是一个简单的闭包
。那么通常情况下如果我们需要使用到函数内部的方法或变量时我们可以使用闭包
。
小结
函数闭包
仅仅
是一种方法,一种通过在函数内部引用变量并将其作为返回值暴露到外部的一种方法。通过在这方法我们可以操作函数内部的局部变量。
注意
在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
0 0