0

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

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

原因 - 如果我们使用没有运行的解析器功能

function(){ return 1}()

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

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

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

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

PS问题是关于(function(){ return 1;}())变体的!

4

2 回答 2

2
(function() {})()

(function() {}())

是等价的。

要调用第二个示例,您可以+在函数之前包含运算符

+function(){ return 1 }()

请参阅立即调用函数表达式 (IIFE)

于 2016-05-16T14:47:11.323 回答
2

该短语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; }()

不起作用,因为 afunction statement与 a 不同function expression。不能立即调用函数语句。

于 2016-05-16T14:55:12.053 回答