星海

JavaScript · 主观题 · 第 19 题

前端与全栈开发面试 · 第 19 题

什么是闭包?说说它的常见用途和可能带来的问题。

参考答案

1. 定义:函数和它定义时所在的词法环境的组合。内部函数引用了外部函数的变量,即使外部函数已经返回,这些变量仍然被保留。
2. 用途:封装私有状态(计数器、模块模式);函数工厂和柯里化;防抖、节流里保存定时器;React Hooks 里的回调捕获当次渲染的 state。
3. 问题一,内存:闭包引用的变量无法被回收,长期持有大对象或 DOM 节点(比如挂在全局的事件回调)会造成内存泄漏,不用时要解除引用、移除监听。
4. 问题二,过期闭包:回调捕获了旧值,比如 useEffect 里的定时器一直读到初始 state。解决办法是正确声明依赖、使用函数式更新 setX(x => x + 1),或用 ref 保存最新值。
5. 经典面试题:var 循环加 setTimeout,用 let 或立即执行函数解决。

解析

定义、用途、内存与过期闭包两类问题。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。