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 是实现“模块”的主流方式:
YXPHP6系统可以看做是一个模版平台,而且它又能独立工作. 而且YXPHP6系统也不需要数据库支持. 你可以开发自己的模板,也可以同步官方的模板后进行自己的二次开发,前提是您对YXPHP6要有一定的了解.YXPHP6不仅可以用作企业建站,甚至是blog,只要是您能想到的,YXPHP6几乎都可以胜任. 因为YXPHP6系统本身与模板之间可以说是独立运行的.也就是说,不管你做什么样的网站或者是应用,
立即学习“Java免费学习笔记(深入)”;
- 返回一个对象,暴露有限接口(如
increment、getCount),内部状态count不可直接访问 - 多个模块各自 IIFE,互不影响,避免命名冲突和意外修改
- 常见于 jQuery 插件、早期 AMD/CMD 模块包装器中
一次性执行的初始化逻辑
有些代码只需页面加载时跑一次,后续不再需要,也不该留下全局痕迹:
- 配置读取、DOM 就绪判断、性能打点初始化
- 避免临时变量长期驻留内存,减少 GC 压力
- 语法简洁:
(function() { /* 初始化 */ })();或(() => { /* 初始化 */ })();(箭头函数需注意this)









