为什么自我执行匿名工作?

Why Self-Executing Anonymous works?

我知道自我执行匿名。通常我们将它们创建为

(function(){ return 1;})()

原因 - 如果我们使用

,则解析器功能没有运行
function(){ return 1}()

但是今天我发现下一个代码也可以工作(检查括号顺序)

(function(){ return 1;}())

function(){ return 1; }() 仍然给我 SyntaxError,因为它应该

请解释为什么?感谢参考以获取更多详细信息

P.S。问题是关于 (function(){ return 1;}()) 变体!

(function() {})()

(function() {}())

是等价的。

要调用第二个示例,您可以在函数

之前包含 + 运算符
+function(){ return 1 }()

Immediately-Invoked Function Expression (IIFE)

短语 IIFE 是这些函数的更好术语。立即调用函数表达式。

至于为什么它们相同:外括号()简单地做一个表达式,()一起做调用。

(function(){ return 1;})()
is the same as:
(function(){ return 1;}())


(function(){ return 1;})()
becomes
(functionexpression)()
becomes
functionexpression()

(function(){ return 1;}())
becomes
(functionExpression())
becomes   
functionExpression()

出于与

相同的原因

(3)+2 等同于 ((3)+2).

编辑

function(){ return 1; }()

不起作用,因为 function statementfunction expression 不同。不能立即调用函数语句。