IIFE的核心价值是隔离变量声明防止意外泄漏到全局作用域正确写法为(function(){})()或(() {})()传参可优化压缩与性能但不解决异步闭包陷阱或全局副作用。为什么变量会意外泄漏到全局作用域在非严格模式下直接写 varName hello 而不加 var/let/const这个变量就挂到了 window浏览器或 globalNode.js上。多人协作时一个模块里漏写声明符可能悄悄覆盖另一个模块的同名变量——你改完自己逻辑别人页面突然报错 TypeError: someFunction is not a function查半天发现是被你定义的同名 someFunction 覆盖了。IIFE 的核心价值不是“炫技”是给一段逻辑划出明确边界里面声明的 var、let、const 全部关在里面外面看不见也碰不到。怎么写一个安全、可读、兼容性好的 IIFE最稳妥的写法是括号包裹函数表达式再立即调用。别用 function foo() {}() 这种——语法错误JS 引擎会把它当函数声明而函数声明不能紧跟 ()。? 正确(function () { /* code */ }()); 或 (function () { /* code */ })();? 现代写法推荐(( ) { /* code */ })(); —— 箭头函数更短但注意它没有自己的 this 和 arguments? 错误function () { }();缺少外层括号解析为函数声明?? 注意!function () { }(); 可行但 ! 会把返回值转成布尔如果内部 return 了真值外部拿到的是 true容易埋坑IIFE 传参和避免闭包陷阱经常需要把 window、document 或 jQuery 实例传进去既压缩友好UglifyJS 能把形参名压缩又避免反复查作用域链。 文心快码 文心快码Comate是百度推出的一款AI辅助编程工具