- 创建独立作用域,避免变量污染
在大型项目中,全局变量容易相互冲突。IIFE 可以创建一个独立的作用域,将内部变量和函数封装起来,不会影响全局作用域。
// 示例
(function () {
let localVar = '我是 IIFE 内部的局部变量';
console.log(localVar);
})();
// 这里无法访问 localVar,因为它在 IIFE 的独立作用域内
- 模块模式
通过 IIFE 模拟模块,将相关功能封装在一起,只暴露需要的接口。
// 示例
const myModule = (function () {
let privateVar = 10;
function privateFunction() {
console.log('这是一个私有函数');
}
return {
publicFunction: function () {
privateFunction();
console.log('修改前 privateVar: ', privateVar);
privateVar++;
console.log('修改后 privateVar: ', privateVar);
}
};
})();
myModule.publicFunction();
- 用于异步操作
在异步操作时,可以使用 IIFE 传递参数并创建一个作用域,避免闭包带来的变量问题。
// 示例
for (let i = 0; i < 5; i++) {
(function (index) {
setTimeout(() => {
console.log(`这是第 ${index} 次延迟输出`);
}, index * 1000);
})(i);
}