iife 可创建私有作用域实现类似命名空间的封装,通过立即执行函数返回对象暴露接口、隐藏内部实现,支持依赖注入、链式调用与动态扩展,适用于旧环境或无需构建工具的 script 引入场景。

函数表达式本身不具命名空间能力,但可通过立即执行函数(IIFE)创建私有作用域,实现类似命名空间的封装效果。
用 IIFE 创建独立作用域
将函数表达式包裹在括号中并立即调用,能避免污染全局环境,同时让内部变量和函数对外不可见。
- 基本写法:const MyNamespace = (function() { /* 私有逻辑 */ return { publicMethod: ... }; })();
- 返回一个对象,暴露需要对外使用的接口,其余保持私有
- 支持传入参数(如
window、jQuery),便于依赖注入和压缩友好
支持链式调用与模块扩展
返回的对象可设计为支持链式调用,或预留 extend 方法,方便后续动态添加功能。
- 例如:在返回对象中提供
addMethod(name, fn),运行时注入新能力 - 链式调用需每个方法都返回
this,注意不要破坏闭包内私有状态 - 适合构建轻量工具库,如
Utils.formatDate().toUTC()类风格
与 ES6 模块对比的适用场景
在不支持模块语法的旧环境(如 IE 或部分打包配置下),IIFE 封装仍是可靠选择。
- 无需构建工具即可运行,适合直接 script 引入的场景
- 可手动控制依赖顺序,比如先加载基础 IIFE,再加载扩展 IIFE
- 若项目已用 ES 模块,优先使用
export/import,IIFE 更适合作为兼容层或插件机制











