IIFE是定义后立即执行的函数表达式,天然形成私有作用域;通过括号等前缀确保被解析为表达式,内部变量和函数对外不可见,常用于模块封装,现代开发中虽少手写但仍具原理教学与兼容性价值。

立即执行函数(IIFE,Immediately Invoked Function Expression)是定义后立刻运行的函数表达式,它天然形成一个独立的作用域,从而实现变量的私有化——外部无法访问其内部声明的变量和函数。
它长什么样子?
典型的 IIFE 写法是把函数包裹在括号中,再在末尾加一对圆括号来调用:
(() => { console.log('Hello'); })();或者带参数的版本:
(function(name) { console.log('Hi ' + name); })('Alice');关键点在于:必须是函数表达式,不是函数声明。加括号、!、+、void 等前缀,都是为了让 JS 引擎把它识别为表达式而非声明。
立即学习“Java免费学习笔记(深入)”;
为什么能创建私有作用域?
JavaScript 中,函数会创建自己的词法作用域。IIFE 执行完后,内部变量不会自动暴露到全局,只要没有显式返回或挂载到全局对象上,它们就仅在该函数体内有效。
- 函数内部用 var / let / const 声明的变量,对外不可见
- 内部定义的函数,除非作为返回值传出,否则也无法从外部调用
- 闭包机制还能让内部函数持续访问这些“私有”变量
一个实用的私有模块例子
比如封装一个计数器,只暴露增减和获取的接口:
const counter = (function() {let count = 0;
return {
increment: () => ++count,
decrement: () => --count,
value: () => count
};
})();
这里 count 被安全地封闭在 IIFE 内部,外部只能通过返回的对象方法操作它,无法直接修改。
现代开发中还常用吗?
ES6 模块(import/export)和 class 私有字段(#field)已成主流,IIFE 在新项目中较少手写。但它仍是理解作用域、闭包和模块化原理的重要基础,也常见于兼容性代码、UMD 包封装或某些库的源码中。











