关于IIFE

IIFE(立即执行函数表达式),如下:

(function test() {
    var bar = '';
    ...do something
})()

为何采用IIFE

起先由于Javascript词法作用域特性,函数内部才能定义局部变量(ES6已经有了块状作用域)。为了执行一系列的应用逻辑,需要定义一些记录中间状态的变量。如果这些变量不是在函数内部定义,那么就会成为全局变量, 造成全局变量名污染。将变量封装在函数内,可以避免全局变量名污染。但是,传统上,函数的声明和执行是分开的。让函数声明和执行联结到一处,就是IIFE。

如何使用IIFE

声明一个函数然后马上执行这个函数,以下两种方式:

  • 方式一:利用()符号会对圆括号的表达式进行求值的特性,在圆括号内加上函数声明语句,经过圆括号的强制运算,函数对象就被编译到内存中,并且返回一个指向这个函数对象的引用。然后痛过在圆括号后再加一个圆括号,将这个函数调用执行。除了(),还有很多其他操作符和运算符用于对函数声明语句进行强制运算,例如+,!,void

    (function () {...})()
    +function () {...}()
    !function () {...}()
    void function () {...}()

  • 方式二:函数声明和执行组合成一个表达式,然后对这个表达式进行求值:

    (function () {...}())

posted @ 2017-08-04 12:59  snicker  阅读(105)  评论(0编辑  收藏  举报