IIFE 是定义后立即执行的函数表达式,用于创建私有作用域、避免全局污染并实现简易模块化;ES6 模块语法和现代工具链使其逐渐被取代。
立即执行函数(IIFE,Immediately Invoked Function Expression)是 JavaScript 中一种定义后立刻运行的函数表达式。它的核心形式是:(function(){ /* code */ })(); 或 (function(){ /* code */ }()); —— 用括号将函数包裹,再加一对末尾括号触发执行。
在 ES6 模块出现之前,浏览器中所有 script 标签共享全局作用域。如果多个脚本都声明 var counter = 0;,就会互相覆盖或意外修改。IIFE 利用函数作用域形成“私有沙箱”:内部用 var、let、const 声明的变量不会泄露到全局。
IIFE 常通过返回对象或赋值给全局变量来“导出”有限能力,实现简易模块化:
使用 jQuery 和 Lodash */ })(jQuery, _);
这种写法在 RequireJS、早期 jQuery 插件、Bootstrap JS 源码中非常常见。
ES6 原生引入了 模块语法(import/export) 和 块级作用域(let/const),配合打包工具(Webpack、Vite)和浏览器原生模块支持,已能更安全、更清晰地组织代码。
如今 IIFE 主要出现在需要兼容极老环境、生成自执行脚本(如 UMD 包)、或某些构建产物中,不再是主动编写的首选模式。