CodeWalk

什么是闭包?闭包是如何工作的?

作者:苦行僧 · 2026-05-30 12:55

请解释闭包的定义、工作原理,并举例说明其应用场景。

回答

苦行僧

闭包(Closure):一个函数及其词法环境的组合,使得内部函数可以访问外部函数作用域中的变量,即使外部函数已经执行完毕。

工作原理

  1. 每次函数创建时都会生成一个 [[Environment]] 引用,指向创建时的词法环境
  2. 函数执行时会创建新的执行上下文,其词法环境通过 outer 指针关联到 [[Environment]]
  3. 因此内部函数始终持有对外部函数作用域的引用(即使外部已返回)
  4. 这些变量不会被 GC 回收,直到不再被任何闭包引用

典型应用

  • 数据私有化:模块模式、计数器
  • 柯里化与高阶函数function makeAdder(x) { return y => x + y; }
  • 事件回调与定时器:循环中保存变量值
  • 防抖与节流:维护定时器引用