javascript模块化封装的核心是iife,通过立即执行函数创建私有作用域隔离变量,仅暴露返回对象中的接口;支持传参依赖注入、闭包实现特权方法、umd兼容多环境。

JavaScript 中通过函数表达式实现模块化封装,核心是利用立即执行函数表达式(IIFE)创建私有作用域,隔离变量和函数,只暴露需要对外使用的接口。
用 IIFE 构建基础模块结构
函数表达式加括号后立即调用,形成独立作用域,内部定义的变量、函数不会污染全局环境。
- 写法:将函数表达式包裹在圆括号中,再加一对括号执行
- 常见形式:(function() { /* 私有逻辑 */ })();
- 可传入参数(如 window、document),便于压缩和访问外部依赖
导出公共 API 的几种方式
模块需主动返回一个对象,作为外部可访问的接口。返回值可以是普通对象、构造函数或方法集合。
- 返回命名对象:return { init: function() {}, getData: function() {} };
- 支持链式调用:返回 this 或新对象,让方法可连续调用
- 兼容 CommonJS/AMD:在 IIFE 参数中判断 typeof module === 'object' 再决定如何导出
模拟私有成员与特权方法
在 IIFE 内部定义的变量和函数默认“私有”,只有通过返回对象中引用的函数才能访问它们——这就是闭包提供的特权方法。
- 例如:let count = 0; 在外层无法直接读写,但 getCount() 和 increment() 可以操作它
- 避免在返回对象中直接暴露原始数据,而是提供受控的访问器
- 多个模块间共享状态?可通过传入同一个对象作为参数,在闭包外协调
配合依赖注入提升可维护性
把模块依赖(如 jQuery、工具库)作为参数传入 IIFE,既明确依赖关系,又方便测试和替换。
- 示例:(function($, utils) { /* 使用 $ 和 utils */ })(jQuery, myUtils);
- 开发时依赖本地对象,生产可压缩为单字符(如 j),减少体积
- 结合 UMD 模板,一份代码同时支持浏览器全局、AMD、CommonJS 环境
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











