闭包通过封装环境配置实现行为自动适配:初始化时读取环境变量并固化配置,避免重复判断;封装具体逻辑(如mock/真实请求);配合工厂函数支持多实例隔离;捕获值而非引用确保行为稳定。

闭包本身不直接“切换环境”,但它非常适合封装和携带环境相关的配置,让函数行为随配置变化而自动适配。关键在于:把环境判断逻辑提前做完,把结果(如 API 地址、超时时间、日志级别)固化进闭包,后续调用无需重复判断。
用闭包封装环境配置对象
把环境变量(如 process.env.NODE_ENV 或 import.meta.env.MODE)在模块初始化时读取一次,根据值构造一个配置对象,再用闭包把它“锁住”:
- 避免每次调用都查环境变量,性能更稳
- 配置不可变,行为可预测,便于测试
- 天然隔离不同环境的逻辑分支,代码更干净
闭包内注入具体行为逻辑
不只是存 URL,而是把整个行为封装进去。比如请求函数:
- 开发环境走 mock 数据或本地代理
- 生产环境走真实 HTTPS 接口 + 全链路监控上报
- 闭包返回的函数直接执行对应逻辑,调用方无感
配合工厂函数统一管理多环境实例
定义一个工厂函数,接收环境名或配置对象,返回带环境上下文的闭包实例:
- 支持运行时动态创建(如测试中快速切换 mock/real)
- 多个服务(auth、payment、user)可复用同一套工厂模式
- 避免全局污染,每个实例独立持有自己的配置快照
注意闭包捕获的是值,不是引用
确保你捕获的是最终确定的配置值,而不是一个随时可能被改写的对象引用:
- 错误做法:闭包里直接访问 config.apiBase,而 config 是外部可变对象
- 正确做法:在闭包创建时解构赋值,如 const { apiBase, timeout } = resolvedConfig
- 这样即使后续 config 被修改,已生成的闭包行为也不会变










