它们实际上是相同的。
第一个将括号括在函数周围,以使其成为有效的表达式并调用它。表达式的结果是不确定的。
第二个执行函数,并且自动调用周围的括号使之成为有效的表达式。它还将评估为undefined。
我不认为有“正确”的方法,因为表达式的结果是相同的。
> function(){}()SyntaxError: Unexpected token (> (function(){})()undefined> (function(){return 'foo'})()"foo"> (function(){ return 'foo'}())"foo"


