出处

函数 - JavaScript 教程 - 网道 —— 立即调用的函数表达式(IIFE)

代码

  1. (function(){ /* code */ }());
  2. // 或者
  3. (function(){ /* code */ })();

以圆括号开头,引擎就会认为后面跟的是一个表示式,而不是函数定义语句

  • 任何让解释器以表达式来处理函数定义的方法,都能产生同样的效果,比如下面三种写法。 ``` var i = function(){ return 10; }(); true && function(){ / code / }(); 0, function(){ / code / }();
  1. - 甚至像下面这样写,也是可以的。

!function () { / code / }(); ~function () { / code / }(); -function () { / code / }(); +function () { / code / }();

  1. - 通常情况下,只对匿名函数使用这种“立即执行的函数表达式”。它的目的有两个:一是不必为函数命名,避免了污染全局变量;二是 IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。

// 写法一 var tmp = newData; processData(tmp); storeData(tmp);

// 写法二 (function () { var tmp = newData; processData(tmp); storeData(tmp); }());

```

上面代码中,写法二比写法一更好,因为完全避免了污染全局变量。