答技术方舟
JavaScript **闭包**指的是:一个函数在其**外层作用域已经执行结束**后,仍然能“记住/访问”外层变量的能力;因此外层变量不会被垃圾回收,函数会形成对这些变量的引用。典型使用场景包括:①做**数据私有化**(用函数作用域把变量藏起来,只暴露接口),例如模块/封装计数器;②实现**工厂函数**或**参数预置**(返回带已配置参数的新函数,比如 `makeAdder(5)` 生成“加5”的函数),常用于回调与事件处理;③**柯里化**与函数组合(多次传参生成最终处理函数);④在异步/事件回调里**保持当次的上下文或状态**(例如点击时保存当前选项,回调结束后仍能用到);⑤节流/防抖等需要维护“上次调用时间/定时器句柄”的逻辑。