JS闭包有哪些高级工程用法

闭包在工程中的核心用途是把状态和操作状态的函数绑定在一起,只对外暴露受控接口,常见于请求合并、中间件、惰性初始化、资源清理与有界缓存。

要点

  1. 用闭包隐藏进行中的 Promise 实现 Singleflight,同参请求只发一次,结束后自动清理。
  2. 用闭包把 next 层层包裹实现洋葱模型中间件,私有游标防止 next 被重复调用。
  3. 惰性初始化把环境嗅探推迟到首次使用,规避 SSR 阶段访问 window 报错。
  4. 事件订阅返回幂等的销毁闭包,调用方无需保存 listener 引用。
  5. 记忆化缓存要在闭包里加容量上限与 TTL,避免长周期运行内存泄漏。
  6. 注意共享词法环境导致大对象被钉住,以及异步循环中闭包捕获旧 state 的过期闭包问题。

来源