首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数(){ }() vs (函数(){ })()

函数(){ }() vs (函数(){ })()
EN

Stack Overflow用户
提问于 2011-11-29 04:38:45
回答 4查看 2.7K关注 0票数 30

在查看Twitter Bootstrap Javascript中编写的一些代码时,它们似乎立即调用了以下匿名函数:

代码语言:javascript
复制
!function( $ ) {

     ...

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

我传统上看到同样的事情是这样完成的:

代码语言:javascript
复制
(function($) {

    ...

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

第一种方式似乎有点麻烦,我不确定这样做是否有什么好处或理由,而不是第二种方式?注意到我理解它的工作原理,我想了解为什么他们选择这样做。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-29 04:41:30

  • ,当缩小的时候,少一个角色。
  • !应该处理其他JavaScript代码在此之前连接的位置,并且没有尾随的分号.

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

base.js

代码语言:javascript
复制
var lol = function() {
   alert(arguments[0]);
}

im-concat-to-base.js

代码语言:javascript
复制
(function() {
    // Irrelevant.
})();

jsFiddle

加入一个领先的;她就会工作..。

jsFiddle

...or !就像推特的启动带.

jsFiddle

票数 20
EN

Stack Overflow用户

发布于 2011-11-29 04:41:01

它们都是克服语法歧义的方法。两者都不比另一个更“无趣”。只是风格上的选择。

你也可以这样做:

代码语言:javascript
复制
0 + function( $ ) {
  // ...
} ( window.jQuery || window.ender );

或者:

代码语言:javascript
复制
parseInt(function( $ ) {
  // ...
} ( window.jQuery || window.ender ) );
票数 14
EN

Stack Overflow用户

发布于 2013-04-25 01:55:34

!undefined的评估步骤不同,您还可以使用void运算符来消除歧义:

代码语言:javascript
复制
void function($) {
     ...
}(window.jQuery || window.ender);

对它有一种C性质;-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8305915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档