JavaScript-面试-闭包
2026年10月16日·Admin·2 次浏览
面试题:什么是闭包?有什么用途与副作用?
定义
闭包:函数与其词法环境(引用的外层变量)的组合;使得内层函数在外层函数执行结束后,仍能访问外层被捕获的变量。
function outer() {
let count = 0
return function inner() {
return ++count
}
}
inner 持有对 count 的引用 → count 不会被回收。
常见用途
- 封装私有变量(模块模式、工厂函数)。
- 柯里化、偏函数。
- 防抖节流、事件监听里保存状态。
- React Hooks 闭包心智(
useEffect捕获某次渲染的 props/state)。
副作用
- 内存:过度闭包引用大对象 → 难 GC。
- 循环 + var 经典题:旧代码里
for (var i=0; i<3; i++) { setTimeout(()=>console.log(i)) }全打 3;用let或 IIFE 传参解决。
与作用域
闭包依赖词法作用域:定义时决定自由变量来自哪一层,而非调用栈。