(…())与(…)()在javascript闭包中

我知道这很愚蠢,但这之间有任何区别:


(function() {  

    var foo = 'bar';  

})();

和这个?


(function() {  

    var foo = 'bar';  

}());

JSLint告诉我们Move the invocation into the parens that contain the function,但是我认为没有必要。


编辑:答案太酷了。~function,JSHint替代品,以及jQuery的偏好(/***/)();和Crockford的解释!我以为我只会得到“他们是同一件事”的答案。

你们通过投票决定最好的一个,我在上面打勾。


MM们
浏览 585回答 3
3回答

波斯汪

没有区别 两者都是使JavaScript解析器将函数视为表达式而不是声明的有效方法。请注意,+和!也可以使用,并且有时被缩小器用来保存大小字符:+function() {      var foo = 'bar';  }();!function() {      var foo = 'bar';  }();编辑正如@copy指出的那样,出于完整性考虑,它~也-将起作用。-function() {      var foo = 'bar';  }();~function() {      var foo = 'bar';  }();

慕田峪4524236

之所以存在违反JSLint的行为,是因为道格拉斯·克罗克福德(Douglas Crockford)说,外括号版本看起来像“狗球”。您可以在视频中听到他的讨论:我认为这看起来很愚蠢,因为我们正在谈论的是整个调用,但是我们把这些东西挂在了外面,看起来有点像……狗球。他建议里面的括号可以帮助读者理解整个语句是函数表达式而不是声明。

拉丁的传说

不,我不相信有任何区别。我个人更喜欢前者(并且jQuery等人似乎同意),但是它们在我测试过的每个引擎中都一样地工作。另外,JSLint有时过于严格。在这方面,JSHint可能会更好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript