IIFE是定义后立即执行的函数表达式,用于创建私有作用域、避免全局污染、实现模块封装及控制初始化时机。常见形式为(function(){})()或(() => {})(),现代开发中虽被ES Module替代,但在兼容、调试和旧代码中仍常见。

立即执行函数表达式(IIFE,Immediately Invoked function Expression)是 javaScript 中一种定义后立刻运行的函数写法。它本质是一个函数表达式,被包裹在括号中,紧接着用一对圆括号调用执行。最常见形式是:(function(){ /* 代码 */ })(); 或 (( ) => { /* 代码 */ })();。
避免变量污染全局作用域
IIFE 创建独立的作用域,内部声明的变量、函数不会泄漏到全局。这对老项目或模块化不完善时特别有用。
- 比如在页面多个脚本共存时,防止
var counter = 0;被意外覆盖 - 把工具函数封装进 IIFE,外部既用不到也不干扰
- 即使使用
let/const,IIFE 仍可用于兼容旧环境或明确隔离逻辑边界
创建私有作用域与闭包环境
IIFE 内部可返回对象或函数,形成闭包,让部分数据长期私有保存,只暴露有限接口。
- 例如实现一个计数器模块:
(function(){ let count = 0; return { inc(){count++}, get(){return count} }; })() - 外部无法直接修改
count,但能通过方法操作——这是简易的“模块封装” - 适合初始化配置、缓存计算结果、管理单例状态等场景
控制执行时机与依赖顺序
IIFE 在定义处立刻执行,适合需要“一上来就干活”的逻辑,比如 dom 准备就绪前的预处理、第三方 SDK 初始化、环境检测等。
立即学习“Java免费学习笔记(深入)”;
- 常配合
document.readyState或DOMContentLoaded使用,确保安全执行 - 多个 IIFE 可按书写顺序依次执行,便于控制初始化流程
- 在打包工具未普及前,这是组织多个 js 文件逻辑、避免竞态的常用手段
基本上就这些。现代开发中,ES Module 和打包工具弱化了 IIFE 的必要性,但在调试、兼容、快速封装或阅读旧代码时,它依然很常见且实用。