立即执行函数表达式(IIFE)

理解 IIFE 的语法、用法和应用场景

问题

什么是立即执行函数表达式(IIFE),如何使用?

解答

立即执行函数表达式(IIFE)是一种在定义后立即执行的函数模式。本质上是函数表达式在创建后立即调用。

两种标准写法

写法一:函数包裹在括号中,后跟调用括号

(function() {
    // 函数体
})();

写法二:函数和调用括号一起包裹

(function() {
    // 函数体
}());

使用运算符的写法

除了括号,!+-= 等运算符也能将函数声明转换为函数表达式,从而实现立即执行:

// 使用 () 运算符
(function(test) {
    console.log(test); // 输出 123
})(123);

// 使用 ! 运算符
!function(test) {
    console.log(test); // 输出 123
}(123);

// 使用 + 运算符
+function(test) {
    console.log(test); // 输出 123
}(123);

应用场景

IIFE 主要用于创建独立作用域,封装私有变量:

const counter = (function() {
    let count = 0; // 私有变量
    return {
        increment: function() {
            count++;
            return count;
        },
        getCount: function() {
            return count;
        }
    };
})();

console.log(counter.increment()); // 1
console.log(counter.getCount());  // 1

关键点

  • 函数体必须是函数表达式,不能是函数声明
  • 函数体后必须有调用括号 ()
  • 创建独立作用域,避免污染全局变量
  • 可以封装私有变量,外部无法直接访问
  • 常用于模块化开发和变量隔离