在查看Twitter Bootstrap Javascript中编写的一些代码时,看起来他们正在调用立即调用的匿名函数:
!function( $ ) {
...
}(window.jQuery || window.ender);
我传统上看到同样的事情以这种方式完成:
(function($) {
...
})(window.jQuery || window.ender);
第一种方式似乎有点hacky,我不确定这样做是否有任何好处或理由,而不是第二种方式? 请注意,我了解它的工作原理,我希望了解他们选择这种方式的原因。
答案 0 :(得分:19)
!
应该处理此前其他JavaScript代码连接的位置,并且没有尾部分号。没有太大的区别。我会使用你更舒服的任何东西。你可能应该在你的例子的开头抛出一些东西来避免......
var lol = function() {
alert(arguments[0]);
}
(function() {
// Irrelevant.
})();
折腾领先;
,她的作品......
...或者像Twitter Bootstrap一样!
......
答案 1 :(得分:14)
他们既是克服语法模糊性的两种方式。两者都不比另一个更“hacky”。这只是一种风格选择。
你也可以这样做:
0 + function( $ ) {
// ...
} ( window.jQuery || window.ender );
或者:
parseInt(function( $ ) {
// ...
} ( window.jQuery || window.ender ) );
答案 2 :(得分:2)
您可以使用!undefined
运算符来消除歧义,而不是void
的评估步骤:
void function($) {
...
}(window.jQuery || window.ender);
有一种C质量; - )
答案 3 :(得分:0)
我还没有看到的一个答案是它避免用括号包围整个函数。除了美学考虑之外,对于一些使用括号来确定线条缩进程度的编辑来说,这可能是一个加分。