IIFE
意为 Immediately Invoked Functions Expression
。
它指的是在定义时就会立即执行的函数。
js
(function () {
...
})()
上述语法包含两部分:
- 用
()
包裹一个匿名函数。这个匿名函数拥有独立的词法作用域。这不仅避免了外界访问此IIFE
中的变量,而且又不会污染全局作用域。 - 再一次使用
()
创建了一个立即执行函数表达式,JavaScript
引擎到此将直接执行函数。
IIFE
不单单有上面列举的语法,它的所有可使用语法如下:
js
// 1.缺点是无法表明函数与之后的()的整体性,但最普及,大多数库都是这种形式
(function () {
...
})()
// 2.能够将匿名函数与()视作整体,推荐使用
(function () {
...
}())
// 3.放在中括号内执行
[function () {
...
}()]
// 4.使用!开头
!function () {
...
}()
// 5.使用 + 运算符
+function () {
...
}()
// 6.使用 - 运算符
-function () {
...
}()
// 7.使用 ~ 波浪符
~function () {
...
}()
前文中,我们提到,模块化的目的有两个:
- 不污染全局变量。
- 更好的组织和维护代码模块之间的关系。
但显而易见的是,IIFE
并不能完全达到上述两个结果,即使 IIFE
在一定程度上减少了全局变量的污染概率。