!function(){}()vs(function(){})()

在审查Twitter Bootstrap Javascript中编写的一些代码时,看起来他们正在调用匿名函数,如下所示:

!function( $ ) { ... }(window.jQuery || window.ender); 

传统上,我曾经这样做过这样的事情:

 (function($) { ... })(window.jQuery || window.ender); 

第一种方式似乎有些不好意思,我不确定这样做有什么好处或理由,而不是第二种方式呢? 请注意,我明白它是如何工作的,我正在理解为什么他们select这种方式来做到这一点。

  • 缩小的时候less一个字符。
  • ! 应该在这之前处理其他JavaScript代码连接的地方,并且没有尾随的分号。

没有太大的差别。 我会使用任何你更舒服的。 你应该在你的例子开始时抛开一些东西来避免…

base.js

 var lol = function() { alert(arguments[0]); } 

IM-CONCAT到base.js

 (function() { // Irrelevant. })(); 

jsFiddle 。

投中领先; 她的工作…

jsFiddle 。

…或者! 像Twitter Bootstrap …

jsFiddle 。

它们都是通过语法模糊的方式。 也不比其他的更“黑客”。 这只是一种风格的select。

你也可以这样做:

 0 + function( $ ) { // ... } ( window.jQuery || window.ender ); 

要么:

 parseInt(function( $ ) { // ... } ( window.jQuery || window.ender ) ); 

而不是!undefined的评估步骤,你也可以使用void操作符来消除模糊性:

 void function($) { ... }(window.jQuery || window.ender); 

对它有一种C品质;-)

我还没有看到的一个答案是避免用圆括号包围整个函数。 除了审美方面的考虑之外,对于一些使用括号来确定一条线的缩进程度的编辑来说,这是一个优点。