加载中...

IIFE(Immediately Invoked Function Expression,立即执行函数表达式)指定义完成后立刻调用的函数表达式,典型写法为 (function(){ ... })() 或 (function(){ ... }()),外层括号的作用是让解析器把 function 视为表达式而非函数声明。
在 ES6 块级作用域与模块出现之前,JavaScript 只有函数作用域,IIFE 是创建私有作用域的唯一手段:变量被封闭在函数内部,避免污染全局命名空间;配合闭包可实现私有状态与模块模式(revealing module pattern),jQuery 等经典库的源码外层都是一个 IIFE;在 for 循环中用 IIFE 捕获每次迭代的 var 变量也是老代码常见技巧。UMD 模块格式本质上也是一个 IIFE。
ES6 之后,let/const 的块级作用域与原生模块(文件即作用域)取代了 IIFE 的大部分职责,新代码已少见;但打包器输出、老库源码中仍随处可见,async IIFE((async () => {})())也仍是在不支持顶层 await 的环境里执行异步代码的常用写法。

登录 后参与讨论
暂无讨论,来发表第一条评论吧