IIFE 的几种常见写法
1. 带名字的 IIFE
(function autoRun() {
console.log("执行了");
})();
名字在函数体内可见,方便调试,但外面无法调用。
2. 匿名函数 IIFE(最常见)
(function() {
console.log("执行了");
})();
3. 箭头函数 IIFE
(() => {
console.log("执行了");
})();
可以用参数:
((msg) => {
console.log("Hello", msg);
})("World");
4. 一元运算符触发 IIFE
只要能把 function(){} 变成「表达式」,都可以。比如:
!function() {
console.log("执行了");
}();
+function() {
console.log("执行了");
}();
这类写法早期为了压缩代码常见,现在不推荐。
5. async IIFE(常用于顶层 await 替代)
(async () => {
const data = await fetch('/api/data').then(r => r.json());
console.log(data);
})();
🔹 其他“定义即执行”的类似模式
除了 IIFE,JS 里还有一些“定义完就执行”的写法,思路类似:
6. 对象立即调用方法
({
run() {
console.log("执行了");
}
}).run();
7. 类的立即实例化
new class {
constructor() {
console.log("执行了");
}
};
8. 立即调用箭头函数返回的值
const result = (() => 42)();
console.log(result); // 42
✅ 总结:
IIFE 本质就是「函数表达式 + ()」。
常见形式:普通函数、带名字函数、箭头函数、async 函数。
变体:利用 !、+、new 等运算符把函数转成表达式。