概念
当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数的内部变量,且返回的那个函数在外部被执行,就产生了闭包
例如:
function fn() {
var num = 1 // num 就是被闭包的变量
return function() { // 该返回函数就是闭包
num++
return num
}
}
// return 后面的内容其实就是函数返回的结果
1. 闭包的特性
1. 函数嵌套函数
2. 内部函数直接访问外部函数的变量或参数
3. 变量或参数不会被垃圾回收机制回收
2. 闭包的优点
- 变量长期存储在内存中
- 避免全局变量的污染
- 私有成员的存在
3. 闭包的缺点
- 增大内存的使用量,占内存,不能及时释放空间
- 使用不当会造成内存的泄露
- 对捕获的变量是引用,不是复制
- 外层函数每调用一次,就会产生新的闭包