为什么自我执行匿名有效?

时间:2016-05-16 14:41:33

标签: javascript function self-executing-function

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

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

原因 - 如果我们使用

,则无法运行的解析器功能
function(){ return 1}()

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

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

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

请解释原因? Thx以供参考以获取更多详细信息

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

2 个答案:

答案 0 :(得分:2)

(function() {})()

(function() {}())

是等价的。

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

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

请参阅Immediately-Invoked Function Expression (IIFE)

答案 1 :(得分:2)

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

至于为什么它们是相同的:外部的parens ()只是表达式,()一起进行调用。

(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不同。无法立即调用函数语句。