一尘不染

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

javascript

最近,我将json2.js的当前版本与项目中使用的版本进行了比较,并发现函数表达式的创建和自我执行方式有所不同。

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

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

但是现在它将自动执行的函数包装在括号中。

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

有通过CMS在接受答案的注释解释JavaScript的封装匿名函数的语法是“既:(function(){})();(function(){}());有效。”

我想知道有什么区别吗?前者是否通过留下全局匿名函数来占用内存?括号应位于何处?


阅读 268

收藏
2020-04-23

共1个答案

一尘不染

它们实际上是相同的。

第一个将括号括在函数周围,以使其成为有效的表达式并调用它。表达式的结果是不确定的。

第二个执行函数,并且自动调用周围的括号使之成为有效的表达式。它还将评估为undefined。

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

> function(){}()
SyntaxError: Unexpected token (
> (function(){})()
undefined
> (function(){return 'foo'})()
"foo"
> (function(){ return 'foo'}())
"foo"
2020-04-23