javascript function vs(function(){…}());

我经常看到如下的expression式:

(function () { var x = 1; ... }()); 

我如何解读? 在语法上,这本身就是一个匿名函数定义。

 function() { ... } 

()之后呢? 为什么把它放在封闭的()?

谢谢

完全一样,除了被转换成函数expression式之后立即被调用。

 // v-----first set of parentheses makes the function an expression (function () { var x = 1; ... }()); // ^-----this set is used to invoke the function 

和你一样:

  var myfunc = function () { var x = 1; ... }; myfunc(); 

或(类似)这样:

  var returnValue = function () { var x = 1; ... }(); 

摆脱名称,移动括号,你可以看到他们没有那么不同。

我经常发现这个有用的地方是callback函数。 这个表示法还可以用于需要在callback函数中包含variables的情况,但是您需要variables状态不受函数外部影响。

  var someVal = 1; setTimeout( (function(one) { return function() { alert(one); // alerts a 1 even 10 seconds after someVal++; } })(someVal), 10000); someVal++; // the value in the setTimeout will remain the same as it is locked inside. 

在这种情况下,setTimeout接受一个不带参数的函数。 所以如何将一个值传递给该函数的问题可以通过创build一个函数来解决,该函数接受一个返回一个带有0个参数的函数的参数。

我build议任何人想要了解更多关于这个符号的力量,在Firebug JavaScript控制台中玩弄它。 一旦你围绕这个概念,你会开始看到这个强大的概念可以使用的地方。