Javascript的立即执行函数是什么_它有什么用途?

IIFE是定义后立即执行的函数表达式,用于创建私有作用域、防止全局污染、解决循环闭包问题、模拟模块化及执行一次性初始化逻辑。

立即执行函数(IIFE,Immediately Invoked Function Expression)是定义后立刻运行的函数表达式,核心作用是创建一个独立、私有的作用域,让内部变量和逻辑不泄露到外部,尤其在 ES6 之前缺乏块级作用域(let/const)时非常关键。

防止全局变量污染

var 声明的变量若直接写在全局脚本中,会挂到 window(浏览器)或全局对象上,容易重名冲突。IIFE 把初始化代码包进去,变量只在函数内有效:

  • 比如加载第三方库前先做环境检测,相关 flag 变量不必暴露给全局
  • 老项目中多个 标签共用一个全局空间,IIFE 是天然的“隔离墙”

解决循环中闭包导致的变量共享问题

for (var i = 0; i 中绑定事件或延时执行时,回调里访问的 i 往往全是 3 —— 因为 var 是函数作用域,所有迭代共享同一个 i。IIFE 可为每次循环生成独立作用域:

  • (function(i) { setTimeout(() => console.log(i), 100); })(i);
  • ES6 后更推荐用 let,但 IIFE 在兼容旧环境时仍是可靠解法

模拟模块化与私有数据封装

在没有 import/export 的时代,IIFE 是实现“模块”的主流方式:

  • 返回一个对象,暴露有限接口(如 incrementgetCount),内部状态 count 不可直接访问
  • 多个模块各自 IIFE,互不影响,避免命名冲突和意外修改
  • 常见于 jQuery 插件、早期 AMD/CMD 模块包装器中

一次性执行的初始化逻辑

有些代码只需页面加载时跑一次,后续不再需要,也不该留下全局痕迹:

  • 配置读取、DOM 就绪判断、性能打点初始化
  • 避免临时变量长期驻留内存,减少 GC 压力
  • 语法简洁:(function() { /* 初始化 */ })();(() => { /* 初始化 */ })();(箭头函数需注意 this