自动执行匿名JavaScript函数的括号位置?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (69)

我最近将json2.js的当前版本与我在项目中使用的版本进行了比较,并注意到函数表达式如何创建和自我执行方面的差异。

用于将括号中的匿名函数包装并执行的代码,

(function () {
  // code here
})();

但现在它将自动执行的功能封装在括号中。

(function () {
  // code here
}());

注释解释JavaScript的封装匿名函数的语法是“既:(function(){})();(function(){}());有效。”

我想知道有什么区别?前者是否通过留下一个全球性的匿名函数来留存记忆?圆括号应该放在哪里?

提问于
用户回答回答于

他们几乎是一样的。

第一个包围函数的括号以使其成为有效的表达式并调用它。表达式的结果是未定义的。

第二个函数执行该函数,自动调用周围的括号使其成为有效的表达式。它也评估为未定义。

我不认为有这样做的“正确”方式,因为表达的结果是相同的。

> function(){}()
SyntaxError: Unexpected token (
> (function(){})()
undefined
> (function(){return 'foo'})()
"foo"
> (function(){ return 'foo'}())
"foo"
用户回答回答于

在这种情况下,这并不重要。您正在调用一个解析为第一个定义中的函数的表达式,并在第二个示例中定义并立即调用一个函数。它们很相似,因为第一个例子中的函数表达式只是函数定义。

还有其他更明显有用的情况用于调用解析为函数的表达式:

(foo || bar)()

扫码关注云+社区

领取腾讯云代金券