闭包
在一个函数内新建另一个函数时,就相当于创建了一个闭包。内层函数就是闭包。通常情况下,为了能够使得外部函数的内部变量可以访问,一般都会返回这个闭包。
有权访问另一个函数作用域中的变量的函数
1 | function outerFunction () { |
闭包与变量
闭包产生的副作用:闭包只能取得包含函数中任何变量的最后一个值
1 | function createFunction(){ |
因为在每个函数的作用域中都保存着createFunction函数的活动对象,所以他们引用的是同一个变量i。可以通过创建另一个匿名函数强制让闭包的行为符合预期
1 | function createFunction(){ |
闭包的用途
- 访问函数的局部变量
- 让变量的值始终保存在内存中,不被清除
- 减少副作用:可以创建一个任你驱使的内层闭包。bind()
- 创建私有变量
函数内的变量,在函数外部是不能访问的既然不能访问,那么它们就可以称作私有变量。但是有时候确实是需要访问私有变量的。这时候就需要闭包
应用场景
- 匿名自执行函数:减少/避免全局变量的使用
- 实现封装,类似于私有变量
- 在函数执行之前为要执行的函数提供参数