iife 用于模块化和避免全局污染,通过括号包裹匿名函数并立即调用,支持传参、返回配置对象;现代推荐使用 es6 模块替代。

在 JavaScript 中,匿名函数自执行(IIFE)常用于模块化、避免污染全局作用域,同时完成初始化配置。核心是把函数定义和调用写在一起,立即运行并传入所需参数。
基础写法:括号包裹 + 立即调用
最常用的方式是用圆括号将匿名函数包裹,再加一对括号触发执行:
(function() {
// 初始化配置逻辑
const config = { apiBase: 'https://api.example.com', timeout: 5000 };
console.log('配置已加载:', config);
})();
注意:第一对括号告诉解析器这是一个表达式而非函数声明,第二对括号执行它。
带参数的初始化:传入依赖或环境变量
可向 IIFE 传入参数,比如 window、document 或配置对象,既安全又便于测试:
- 传入全局对象,防止被篡改:
(function(global) { global.APP_CONFIG = { debug: true }; })(window); - 传入预设配置:
(function(cfg) { console.log(cfg.env); })({ env: 'production' }); - 结合解构简化:
(function({ baseUrl, version }) { console.log(baseUrl + '/v' + version); })({ baseUrl: '/api', version: '2' });
返回配置对象:支持外部访问
若需导出配置供后续使用,让 IIFE 返回一个对象或函数:
const CONFIG = (function() {
const defaults = { retry: 3, cache: true };
const envConfig = window.APP_ENV === 'dev'
? { ...defaults, debug: true }
: defaults;
return Object.freeze(envConfig); // 冻结防止意外修改
})();
这样 CONFIG.retry 就可在其他地方安全使用。
现代替代方案:模块作用域更推荐
ES6 模块天然隔离作用域,初始化逻辑可直接写在模块顶层:
// config.js
export const CONFIG = {
apiBase: import.meta.env.VITE_API_BASE || '/api',
timeout: 10000
};
// 使用时:import { CONFIG } from './config.js';
在支持模块的环境中,这比 IIFE 更清晰、可 tree-shake、易维护。IIFE 主要用于旧环境或需立即执行且不导出的场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











