出处
函数 - JavaScript 教程 - 网道 —— 立即调用的函数表达式(IIFE)
代码
(function(){ /* code */ }());
// 或者
(function(){ /* code */ })();
以圆括号开头,引擎就会认为后面跟的是一个表示式,而不是函数定义语句
- 任何让解释器以表达式来处理函数定义的方法,都能产生同样的效果,比如下面三种写法。 ``` var i = function(){ return 10; }(); true && function(){ / code / }(); 0, function(){ / code / }();
- 甚至像下面这样写,也是可以的。
!function () { / code / }(); ~function () { / code / }(); -function () { / code / }(); +function () { / code / }();
- 通常情况下,只对匿名函数使用这种“立即执行的函数表达式”。它的目的有两个:一是不必为函数命名,避免了污染全局变量;二是 IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
// 写法一 var tmp = newData; processData(tmp); storeData(tmp);
// 写法二 (function () { var tmp = newData; processData(tmp); storeData(tmp); }());
```
上面代码中,写法二比写法一更好,因为完全避免了污染全局变量。