JS-闭包

38 阅读1分钟

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

至此,我们就实现了一个完整的 闭包的应用

解决了什么问题:

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

优点:

简单好用

缺点:

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