立即执行函数的 N 种写法

出处

函数 - 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);
}());

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

你可能感兴趣的:(立即执行函数的 N 种写法)