# 闭包
简单说下什么叫闭包,闭包出现的意义?闭包有哪些用途
# 1. 什么是闭包
根据mdn的定义
- 能够访问自由变量的函数就是闭包
什么是自由变量呢?
- 在函数中使用变量,但是该变量不是函数的参数也不在函数中定义
变量所在的上下文销毁了,依旧可以进行访问
# 2. 闭包的意义
- 闭包有“保护 + 保存”的作用
- 闭包中的变量是不会被销毁的,所以可以一直进行访问
- 闭包内的变量,外部访问不到。所以起到了保护的作用
function run() {
let count = 0
return function () {
count++
}
}
const counter = run()
counter() // 1
counter() // 2
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 从官方的角度说,上述的实例也算一种闭包的行为
- 只要是变量在函数中使用,但是又不是函数的参数以及函数中定义,都会形成闭包
# 3. 闭包的场景
- 使用闭包封装功能。将部分功能返回供外部使用(
模块化
) - 在es6之前没有出现块级作用域。可以使用闭包模拟作用域
# 4. 闭包的缺陷以及产生的原因
- 缺陷:
- 过度的使用闭包会造成内存泄露。是因为变量占用内存无法释放
- 原因:
- 遗忘的定时器
- 使用不当的闭包
- 遗漏的 DOM 元素
- 意外的全局变量