1.定义
闭包就是有权访问另一个函数变量的函数。被访问的局部变量所在的函数即为闭包。创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域
function fn() {
var num = 10;
return function() {
console.log(num);
}
}
var f = fn();
f();
2. 好处与缺点
闭包的主要作用,一个是可以读取函数内部的变量,延伸变量的作用范围;另一个就是让这些变量始终保持在内存中。
闭包的另一个作用是,封装对象的私有属性和私有方法
好处:
- 能够实现封装和缓存等
- 可以避免全局变量的污染
缺点:
- 消耗内存、不正当使用会造成内存溢出的问题
使用时要注意:
- 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露
- 在退出函数之前,将不使用的局部变量全部删除
3. 闭包的特性
- 函数内再嵌套函数
- 内部函数可以引用外层的参数和变量
- 参数和变量不会被垃圾回收机制回收