谈谈闭包

64 阅读1分钟

闭包(Closure)是指在 JavaScript 中,内部函数可以访问外部函数作用域中的变量和函数,即使外部函数已经执行完毕并返回。这种特性可以通过函数嵌套来实现,并且内部函数可以返回到外部使用。

通俗地说,闭包就是一个函数可以访问其定义时所处的词法环境中的变量的能力。当一个函数返回另一个函数时,如果后者仍然引用了前者的作用域中的变量,那么这些变量将继续留在内存中,不会被释放。

闭包的最大特点是可以保留变量状态。例如,在事件监听器中,可以通过闭包保存监听器函数中的一些状态信息,以便在回调函数中再次使用。同时,由于闭包会占用额外的内存空间,因此需要注意内存泄漏的问题。

下面是一个简单的闭包示例,其中内部函数 innerFunc 通过闭包访问了外部函数 outerFunc 中的变量 count:

function outerFunc() {
  let count = 0;
  
  function innerFunc() {
    count++;
    console.log(count);
  }
  
  return innerFunc;
}

const func = outerFunc();
func(); // 输出 1
func(); // 输出 2

在该示例中,outerFunc 函数返回了 innerFunc 函数,内部函数可以访问外部函数中的变量 count,并对其进行操作。每次调用 func() 函数时,变量 count 的值都会增加 1。