我知道自我执行匿名。通常我们将它们创建为
(function(){ return 1;})()
原因 - 如果我们使用
,则无法运行的解析器功能function(){ return 1}()
但今天我发现下一个代码也有效(检查括号顺序)
(function(){ return 1;}())
function(){ return 1; }()
仍然给我一个SyntaxError,因为它应该
请解释原因? Thx以供参考以获取更多详细信息
P.S。问题是关于(function(){ return 1;}())
变种!
答案 0 :(得分:2)
(function() {})()
和
(function() {}())
是等价的。
要调用第二个示例,您可以在函数
之前包含+
运算符
+function(){ return 1 }()
答案 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 statement
与function expression
不同。无法立即调用函数语句。