为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MM们 2019-10-09 15:05:05
我知道这很愚蠢,但这之间有任何区别:(function() {      var foo = 'bar';  })();和这个?(function() {      var foo = 'bar';  }());JSLint告诉我们Move the invocation into the parens that contain the function,但是我认为没有必要。编辑:答案太酷了。~function,JSHint替代品,以及jQuery的偏好(/***/)();和Crockford的解释!我以为我只会得到“他们是同一件事”的答案。你们通过投票决定最好的一个,我在上面打勾。
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

没有区别 两者都是使JavaScript解析器将函数视为表达式而不是声明的有效方法。


请注意,+和!也可以使用,并且有时被缩小器用来保存大小字符:


+function() {  

    var foo = 'bar';  

}();


!function() {  

    var foo = 'bar';  

}();

编辑


正如@copy指出的那样,出于完整性考虑,它~也-将起作用。


-function() {  

    var foo = 'bar';  

}();


~function() {  

    var foo = 'bar';  

}();


查看完整回答
反对 回复 2019-10-09
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

之所以存在违反JSLint的行为,是因为道格拉斯·克罗克福德(Douglas Crockford)说,外括号版本看起来像“狗球”。


您可以在视频中听到他的讨论:


我认为这看起来很愚蠢,因为我们正在谈论的是整个调用,但是我们把这些东西挂在了外面,看起来有点像……狗球。


他建议里面的括号可以帮助读者理解整个语句是函数表达式而不是声明。


查看完整回答
反对 回复 2019-10-09
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

不,我不相信有任何区别。我个人更喜欢前者(并且jQuery等人似乎同意),但是它们在我测试过的每个引擎中都一样地工作。


另外,JSLint有时过于严格。在这方面,JSHint可能会更好。


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 582 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信