1、闭包的定义

一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你,而且函数B引用了一个A中的变量。这个返回的函数B就叫做闭包。

function foo() {
  var num = 123;
  return function() {
    return num;
  }
}

2、闭包形成条件(缺一不可)

  • 必须有一个内嵌函数(函数里定义的函数)——这对应函数之间的嵌套
  • 内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
  • 外部函数必须返回内嵌函数——必须返回那个内部函数

3、闭包用途

  • 能够访问函数定义时所在的词法作用域(阻止其被回收)
  • 私有化变量
  • 模拟块级作用域
  • 创建模块

4、闭包缺点

会导致函数的变量一直保存在内存中,过多的闭包可能会导致内存泄漏