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