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

jon*_*ohn 29 javascript twitter-bootstrap iife

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

!function( $ ) {

     ...

}(window.jQuery || window.ender);
Run Code Online (Sandbox Code Playgroud)

我传统上看到过这样的事情:

(function($) {

    ...

})(window.jQuery || window.ender);
Run Code Online (Sandbox Code Playgroud)

第一种方式似乎有点hacky,我不确定这样做是否有任何好处或理由,而不是第二种方式? 请注意,我理解它是如何工作的,我希望了解为什么他们选择这种方式来做到这一点.

ale*_*lex 19

  • 缩小时少一个角色.
  • !应处理,而其他的JavaScript代码在此之前连接起来并没有尾随分号.

没有太大的区别.我会使用你更舒服的任何东西.你可能应该在你的例子开头扔东西以避免......

base.js

var lol = function() {
   alert(arguments[0]);
}
Run Code Online (Sandbox Code Playgroud)

IM-CONCAT到base.js

(function() {
    // Irrelevant.
})();
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

折腾领先;,她的作品......

jsFiddle.

...或者!像Twitter Bootstrap ...

jsFiddle.


Poi*_*nty 14

他们既是克服语法模糊性的两种方式.两者都不比另一个更"hacky".这只是一种风格选择.

你也可以这样做:

0 + function( $ ) {
  // ...
} ( window.jQuery || window.ender );
Run Code Online (Sandbox Code Playgroud)

要么:

parseInt(function( $ ) {
  // ...
} ( window.jQuery || window.ender ) );
Run Code Online (Sandbox Code Playgroud)

  • 如果有人使用`parseInt()`,我会很困惑:P (13认同)
  • 它们都是"常规"JavaScript惯用语.关键是函数的实例化只是在*any*JavaScript表达式中可以做的事情. (4认同)