#42
立即执行函数
Champ2026.06.05 15:44created at 2026.06.05 15:44updated at 2026.06.05 15:44
0 次阅读

What's IIFE?
立即执行函数 IIFE ,是一种定义后立即执行的函数,常用于创建一个独立的作用域。是ES6之前的用法,主要用于解决在没有出现 let、const 之前的 var 变量所带来的问题,它的核心作用是隔离作用域,解决全局污染和闭包陷阱的问题。
在 ES6 之前,使用立即执行函数来解决闭包问题的例子:
for (var i = 0; i < 3; i++) {
(function(j) {
setTimeout(function() { console.log(j); }, 100);
})(i);
}
// 输出 0,1,2 而不是 3,3,3
立即执行函数可以这样记忆:就是两个括号。
- 第一个括号里面放函数表达式(注意不是函数声明)
- 第二个括号里面可以什么都不放,或者放调用的参数
第一个括号表示的是一整个函数表达式,可以像这样理解:
括号内是一个匿名函数表达式
function() { ... },所以整个(function() { ... })的值就是这个函数对象本身(就像const fn = function() {...}里的右侧部分==function(){...}==一样)。
第二个括号可以这样理解:
function sayHi() { console.log("Hi"); } // 定义
sayHi; // 只是引用函数,不执行(实际上单独写也没意义)
sayHi(); // 执行
也就是说,要多加一个括号才能执行函数。如果没有第二个括号,这个函数就什么都不会动,只是定义了,但并没有执行。
同时,这个括号里面也可以传参数,就像平时调用sayHi()的时候往括号里传参一样。
其实调用立即执行函数也不一定需要第一个括号,也可以是下面这样:
+function() { console.log(1); }();
!function() { console.log(2); }();
~function() { console.log(3); }();