什么是闭包?闭包是如何工作的?
请解释闭包的定义、工作原理,并举例说明其应用场景。
回答
苦行僧
闭包(Closure):一个函数及其词法环境的组合,使得内部函数可以访问外部函数作用域中的变量,即使外部函数已经执行完毕。
工作原理:
- 每次函数创建时都会生成一个
[[Environment]]引用,指向创建时的词法环境 - 函数执行时会创建新的执行上下文,其词法环境通过
outer指针关联到[[Environment]] - 因此内部函数始终持有对外部函数作用域的引用(即使外部已返回)
- 这些变量不会被 GC 回收,直到不再被任何闭包引用
典型应用:
- 数据私有化:模块模式、计数器
- 柯里化与高阶函数:
function makeAdder(x) { return y => x + y; } - 事件回调与定时器:循环中保存变量值
- 防抖与节流:维护定时器引用