JS 的闭包是什么?

151 阅读1分钟

是什么

闭包是 JS 的一种语法特性

闭包 = 函数 + 自由变量

对于一个函数来说,变量分为:全局变量、本地变量、自由变量

怎么制造一个「非全局环境」呢?答案是立即执行函数:

const x = function (){
    var count
    function add (){ // 访问了外部变量的函数
      count += 1
    }
}()

解决了什么问题:

  1. 避免污染全局环境。(因为用的是局部变量)
  1. 提供对局部变量的间接访问。(因为只能 count += 1 不能 count -= 1)
  1. 维持变量,使其不被垃圾回收。

优点:

简单,好用。

缺点:

闭包使用不当可能造成内存泄露。

注意,重点是「使用不当」,不是闭包。 怎么解决缺点:

慎用,少用,不用。