是什么
闭包是 JS 的一种语法特性。
闭包 = 函数 + 自由变量
对于一个函数来说,变量分为:全局变量、本地变量、自由变量
怎么制造一个「非全局环境」呢?答案是立即执行函数:
const x = function (){
var count
function add (){ // 访问了外部变量的函数
count += 1
}
}()
解决了什么问题:
- 避免污染全局环境。(因为用的是局部变量)
- 提供对局部变量的间接访问。(因为只能 count += 1 不能 count -= 1)
- 维持变量,使其不被垃圾回收。
优点:
简单,好用。
缺点:
闭包使用不当可能造成内存泄露。
注意,重点是「使用不当」,不是闭包。 怎么解决缺点:
慎用,少用,不用。