闭包是模块模式实现私有的核心机制,通过IIFE创建私有作用域,返回函数持闭包引用访问内部变量,外部无法直接访问,支持多实例隔离与初始化逻辑。

利用闭包构建模块模式,核心是用立即执行函数表达式(IIFE)创建私有作用域,只暴露必要接口,既隔离内部状态,又避免全局污染。
用 IIFE 划出私有边界
闭包让内部变量在函数执行后仍可被返回的函数访问,而外部无法直接触碰。IIFE 是触发这一机制的最简方式:
- 把所有变量和辅助函数写在 IIFE 内部,它们天然成为“私有成员”
- return 一个对象,只包含你想对外公开的方法或属性
- 这个对象里的每个方法,因处于闭包中,能自由读写私有变量
封装状态与行为,支持初始化逻辑
模块不只是存数据,还能带初始化步骤和私有工具函数:
- 可在 IIFE 开头做一次性的设置,比如加载默认配置、绑定事件、预取资源
- 定义仅模块内部调用的辅助函数(如校验、格式化),不暴露给使用者
- 私有变量可以是基础值,也可以是数组、对象甚至 DOM 引用,只要不 return 出去就安全
支持多实例与状态隔离
如果需要多个独立模块实例(比如多个计数器、多个表单验证器),可把模块写成工厂函数:
- 用普通函数代替 IIFE,接收参数(如初始值、配置项)
- 每次调用都生成新的闭包环境,各实例私有变量互不影响
- 比单例模块更灵活,适合组件化场景
适配现代环境的小技巧
闭包模块本身不依赖 import/export,但要跨 Node 和浏览器使用,需轻量包装:
- Node 环境下加 module.exports = 模块名 即可 require
- 浏览器中直接 script 引入,或作为 ES 模块 export default 包一层
- 打包工具(Webpack/Vite)能自动识别并处理,无需额外配置

















