初次了解闭包
- 闭包概念:
内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被终结了之后。CSDN
初看概念可能不太好理解,下面通过一个例子演示一下
function A(){
var a = 10;
return function(){
console.log(a);
}
}
var b = A();
b();
通过这个简单例子相信你能对闭包有一些初步的认识,接下来我们继续说
闭包的用途
闭包的主要用途有两个
- 可以读取到函数内部的变量
- 令这些变量始终保存在内存中
如上面的例子所示
函数A中的局部变量a一直保存在内存中,并没有在A调用后被自动清除。
为什么会这样呢?原因就在于A是返回函数的父函数,而返回函数被赋给了一个全局变量,这导致返回函数始终在内存中,而返回函数的存在依赖于A,因此A也始终在内存中,不会在调用结束后被终结。
闭包使用时需要注意的点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。阮一峰的网络日志
闭包的优缺点
优点
- 可以保护函数内的变量,防止其他变量流入
- 变量始终在内存中
- 某些情况下可减少内存消耗
缺点
- 其中一个缺点就是被引用的变量无法被终结,增大了内存消耗,不可滥用
- 由于闭包跨作用域访问,会导致性能低下
简单总结一下就是能够访问另一个函数作用域的变量的函数。