523 字
1 分钟
IIFE
IIFE(Immediately Invoked Function Expressions)代表立即执行函数
什么是IIFE
一个被立即执行的函数表达式。
关键要点(文章核心强调)
-
必须是函数表达式,不是函数声明: 函数声明:function fn() {} 函数表达式:var fn = function() {} 或 (function() {})
-
定义完立刻执行,不需要调用、不需要名字
-
自带独立作用域,不污染全局
写法:
(function(){ /* code */ })();IIFE 的创作背景(文章里的历史原因)
背景 1:JS 没有块级作用域(早期)
·ES6 之前,JS 只有函数作用域,没有 let/const。 ·变量都会泄露到全局,造成污染。
背景 2:函数声明不能立即执行
function(){}(); // SyntaxError因为 JS 引擎把它当作函数声明,而函数声明必须有名字,且不能直接加 () 执行。
一般我们会进行如下操作: function a (){ } //声明a 函数
a()//在函数名后加()执行背景 3:需要一种 “创建作用域 + 立刻运行 + 不留痕迹” 的写法
IIFE 能用来干什么?
1.创建独立作用域,避免全局污染
函数内部变量外部无法访问,实现私有化。
(function(){ var a = 10; // 外部访问不到})();
console.log(a); // ReferenceError2.解决循环中闭包保存状态问题
循环绑定事件时,锁定每次循环的 i 值
for (var i = 0; i < 5; i++) { (function(lockedInIndex) { elems[i].onclick = function() { alert(lockedInIndex); // 正确输出 0、1、2、3、4 }; })(i);}3.实现模块化
IIFE 是模块化的基础。 ·私有化变量 ·暴露接口 ·不污染全局 ·早期 jQuery、所有库 都用它封装
接收全局变量,避免冲突
可以把 window、jQuery 当参数传进去
(function(window, ) { // 这里使用 不会被外部干扰 })(window, jQuery);
总结
- IIFE 是 立即执行的函数表达式
- 它不是自执行,不是必须匿名
- 为了解决 JS 无块级作用域、全局污染 而诞生
- 核心用途:创建作用域、闭包保存状态、模块化、避免冲突
- 是 ES6 之前 JS 最核心的模块化 / 作用域方案
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
