iife的核心作用是创建独立作用域以隔离变量、避免全局污染;其语法必须用括号将函数转为表达式并立即调用,否则会因解析为函数声明而报错。

在 JavaScript 中,IIFE(Immediately Invoked Function Expression,立即执行函数表达式)的核心作用之一就是创建独立的作用域,从而隔离变量,避免污染全局命名空间。关键在于“函数自调用” + “作用域封闭”。
用括号包裹函数表达式,再立即调用
必须让 JS 引擎把函数识别为表达式(而非函数声明),否则会报语法错误。常见写法有:
- (function () { /* 变量在此定义 */ })();
- (function () { /* ... */ }());(调用括号包在外部)
- (( ) => { /* 箭头函数也可,但无 arguments 且 this 不同 */ })();
不加外层括号(如 function(){}())会被解析为函数声明,后面紧跟 () 是非法语法。
所有 var/let/const 声明都只在 IIFE 内部有效
IIFE 执行时新建一个函数作用域,内部声明的变量不会泄漏到外部:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
(function () {
var a = 1;
let b = 2;
const c = 3;
console.log(a, b, c); // 1 2 3
})();
console.log(a); // ReferenceError: a is not defined
console.log(b); // ReferenceError: b is not defined
通过 return 或参数传递有限数据出去
如果需要对外暴露某些值或方法,显式返回对象或赋值给外部变量:
-
用 return 返回一个接口对象:
const utils = (function () {<br> const privateHelper = () => 'hidden';<br> return {<br> publicMethod() { return privateHelper() + ' exposed'; }<br> };<br>})();<br>utils.publicMethod(); // "hidden exposed" -
传入全局对象(如 window)作为参数,挂载属性(传统库常用):
(function (global) {<br> global.MyLib = { version: '1.0' };<br>})(typeof window !== 'undefined' ? window : globalThis);
注意:IIFE 不解决异步闭包陷阱,需配合块级作用域
循环中创建异步操作(如 setTimeout)时,仅靠 IIFE(尤其是老式 var + IIFE)可能不够直观。现代写法更推荐直接用 let 块级作用域:
// 传统 IIFE 方案(兼容旧环境) for (var i = 0; i console.log(index), 100); })(i); } <p>// 更简洁清晰的现代方案(推荐) for (let i = 0; i console.log(i), 100); // 0, 1, 2 } </p>
此时 let 已天然提供块级绑定,IIFE 不是唯一解,但理解它有助于掌握作用域本质。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










