立即执行函数(IIFE)是最轻量可控的代码隔离方式,通过匿名函数封装逻辑限制变量作用域,支持依赖注入、命名空间管理和块级作用域优化。

直接用函数包裹代码,是最轻量、最可控的隔离方式。它不依赖构建工具或新语法,所有团队成员都能快速理解并统一执行。
用立即执行函数(IIFE)封装整块逻辑
把每个功能模块或每个工程师负责的脚本包进一个匿名函数并立即执行,变量就自然限制在函数内部,不会泄漏到全局。
- 写法简洁:`(function() { var data = 'private'; console.log(data); })();`
- 外部完全访问不到 data,连 window.data 都是 undefined
- 适合老项目升级、第三方脚本嵌入、或需要快速上线的协作场景
通过参数注入依赖,避免隐式全局引用
函数内部若需用到 jQuery、lodash 等库,不要直接写 $ 或 _,而是显式作为参数传入。
- 安全写法:
(function($, _){ /* 你的代码 */ })(jQuery, _); - 好处是:既防止了全局变量污染,又明确声明了依赖,还能在无冲突环境下做单元测试
- 如果某人误删了 jQuery 引入,这个模块会立刻报错,而不是静默失效
命名空间对象作“通信桥梁”,而非裸变量
当不同模块确实需要共享少量数据(比如配置、状态标记),别用多个全局变量,而用单个命名空间对象统一管理。
- 推荐初始化:
var APP = APP || {};,确保不覆盖已有内容 - 模块 A 写:
APP.user = { id: 123 }; - 模块 B 读:
if (APP.user && APP.user.id) { ... } - 再进一步可加二级命名:
APP.auth.token、APP.ui.sidebarOpen,降低属性名冲突概率
配合块级作用域(let/const)收紧变量生命周期
在 IIFE 内部,也别滥用 var。循环、条件语句、临时计算都优先用 let 和 const。
- 例如:
for (let i = 0; i 中的 <strong>i</strong> 不会泄露到整个函数作用域 - 减少意外重用变量名的风险,尤其在多人修改同一段逻辑时
- ES6 环境下,let/const + IIFE 是兼顾兼容性与现代性的稳妥组合

















