关于IIFE
IIFE(立即执行函数表达式),如下:
(function test() {
var bar = '';
...do something
})()
为何采用IIFE
起先由于Javascript词法作用域特性,函数内部才能定义局部变量(ES6已经有了块状作用域)。为了执行一系列的应用逻辑,需要定义一些记录中间状态的变量。如果这些变量不是在函数内部定义,那么就会成为全局变量, 造成全局变量名污染。将变量封装在函数内,可以避免全局变量名污染。但是,传统上,函数的声明和执行是分开的。让函数声明和执行联结到一处,就是IIFE。
如何使用IIFE
声明一个函数然后马上执行这个函数,以下两种方式:
-
方式一:利用
()
符号会对圆括号的表达式进行求值的特性,在圆括号内加上函数声明语句,经过圆括号的强制运算,函数对象就被编译到内存中,并且返回一个指向这个函数对象的引用。然后痛过在圆括号后再加一个圆括号,将这个函数调用执行。除了()
,还有很多其他操作符和运算符用于对函数声明语句进行强制运算,例如+
,!
,void
(function () {...})()
+function () {...}()
!function () {...}()
void function () {...}() -
方式二:函数声明和执行组合成一个表达式,然后对这个表达式进行求值:
(function () {...}())