Javascript !函数(){}()vs(函数(){})()

Javascript !函数(){}()vs(函数(){})(),javascript,twitter-bootstrap,iife,Javascript,Twitter Bootstrap,Iife,在查看用Twitter引导Javascript编写的一些代码时,看起来他们正在调用以下立即调用的匿名函数: !function( $ ) { ... }(window.jQuery || window.ender); 我在传统上看到同样的事情是这样完成的: (function($) { ... })(window.jQuery || window.ender); 第一种方法似乎有点老套,我不确定这样做是否比第二种方法有任何好处或理由请注意,我了解它是如何工作的,我希

在查看用Twitter引导Javascript编写的一些代码时,看起来他们正在调用以下立即调用的匿名函数:

!function( $ ) {

     ...

}(window.jQuery || window.ender);
我在传统上看到同样的事情是这样完成的:

(function($) {

    ...

})(window.jQuery || window.ender);

第一种方法似乎有点老套,我不确定这样做是否比第二种方法有任何好处或理由请注意,我了解它是如何工作的,我希望了解他们为什么选择这种方式。它们都是克服语法歧义的方法。两者都不比另一个更“黑”。这只是一种风格选择

您也可以这样做:

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

  • 缩小后少一个字符
  • 应该处理在此之前连接的其他JavaScript代码,并且没有尾随分号
这并没有很大的区别。我会用你觉得舒服的东西。您可能应该在示例开始时扔掉一些东西,以避免

基础文件 im-concat-to-base.js

抛出一个前导的
和她工作

…或
就像推特引导程序一样


.

而不是
的评估步骤!undefined
您还可以使用
void
操作符来消除歧义:

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

有一种C性质;-)

我还没有看到的一个答案是,它避免了用括号括住整个函数。除了美学方面的考虑之外,这对一些使用括号来确定行缩进程度的编辑来说是一个加号。

这里是by。可能重复的,@outis:我不相信这是重复的;这是问为什么
!function(){}()
而不是
(function(){})(
,而不是
(function(){})(
vs
function(){}()
。(在某些情况下,最后一个会导致语法错误。前两个都不会。)谢谢@icktoofay,现在我已经阅读了它,并仔细研究了它的编写方式。。。大部分都让我很恼火;)如果有人像这样使用
parseInt()
的话,我可能会很困惑:pye我也是!问题的关键是,原始问题中的两个代表了许多可能性中不那么奇怪的选择:-)@Pointy两者都不比另一个更“黑客”=>你的意思是两者都是黑客,而不是常规的js符号吗?它们都是“常规”JavaScript习惯用法。关键是函数的实例化只是一个可以在任何JavaScript表达式中间进行的事情。
var lol = function() {
   alert(arguments[0]);
}
(function() {
    // Irrelevant.
})();
void function($) {
     ...
}(window.jQuery || window.ender);