JS的闭包是什么?怎么用
闭包是JS的一种语法特性
闭包 = 函数 + 自由变量
对于一个函数来说,变量分为:全局变量、本地变量、自由变量
let count
function add () { // 访问了外部变量的函数
count += 1
}
把上面的代码放在 非全局环境 里,就是闭包
注意,闭包不是count,也不是add,闭包是 count + add 组成的整体
怎么制造一个非全局环境呢?答案是立即执行函数
const x = function (){
var count
function add (){ // 访问了外部变量的函数
count += 1
}
}()
但是这个代码什么用也没有,所以我们需要 `return add`,即
const add2 = function (){
var count
return function add (){ // 访问了外部变量的函数
count += 1
}
}()
此时add2其实就是add,我们可以调用add2
add2() => add() => count +=1
至此,我们就实现了一个完整的 闭包的应用
解决了什么问题:
- 避免污染全局环境。(因为用的是局部变量)
- 提供对局部变量的间接访问。(因为只能 count += 1 不能 count -= 1)
- 维持变量,使其不被垃圾回收
优点:
简单好用
缺点:
闭包使用不当可能造成内存泄漏