

新闻资讯
技术学院IIFE是定义后立即执行的函数表达式,用于创建独立作用域以避免全局污染、实现模块模式、解决循环绑定问题;现代ES6+已多用模块、let/const、class等替代。
立即执行函数(IIFE,Immediately Invoked Function Expression)是定义后立刻运行的函数表达式,常见写法是把函数用括号包裹再加一对调用括号:(function(){ ... })(); 或 (( ) => { ... })();。它的核心作用是创建独立作用域,避免变量污染全局环境。
在没有模块系统的旧代码或浏览器脚本中,直接声明变量会挂到 window 上。IIFE 提供了一个私有作用域,内部声明的 var、let、const 不会泄露出去。
例如:
(function() {
var temp = 'private';
console.log(temp); // 可访问
})();
console.log(temp); // ReferenceError: temp is not defined
IIFE 常配合闭包返回一个对象,暴露有限接口,隐藏内部实现细节
。
比如封装一个计数器:
var Counter = (function() {
let count = 0;
return {
increment() { count++; },
get() { return count; }
};
})();
Counter.increment();
console.log(Counter.get()); // 1
这里的 count 无法从外部直接修改,实现了数据封装。
在 for 循环中给多个元素绑定事件时,若直接用 var i,回调中取到的往往是最终值。IIFE 可捕获每次迭代的值:
for (var i = 0; i < 3; i++) {
(function(index) {
setTimeout(() => console.log(index), 100);
})(i);
}现代写法更推荐用 let 替代(块级作用域自动解决):
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
ES6 后,多数 IIFE 场景已有更清晰的替代方式:
export 显式导出,import 按需引入,天然隔离作用域。不过在需要兼容老环境、写无构建流程的纯浏览器脚本,或快速创建一次性作用域时,IIFE 依然简洁有效。
基本上就这些。它不是必须掌握的高级技巧,但理解它能帮你读懂老代码,也更清楚作用域和模块化的演进逻辑。