为什么我可以写
var foo = function(){}();
无法完成
function(){}();
有没有任何设计原因?
为什么我可以写
var foo = function(){}();
无法完成
function(){}();
有没有任何设计原因?
第一个例子是一次赋值:右侧是一个表达式,并且匿名函数的立即执行是有意义的。
第二个例子是一次声明:一旦遇到闭合的"}"
,声明就结束了。单独使用圆括号没有意义--它们必须包含一个表达式。最后的")"
是一个错误。
独立的声明必须转换为表达式:
(function() {})(); // Or...
(function() {}());
第一个将声明变为表达式,然后执行结果。第二个将声明和执行都变成了表达式。
另请参见何时使用括号?何时不使用?
(function(){}());
。 - gen_Eric(function(){}());
语法。 - gen_Eric你可以使用(function(){})();
,并且在var foo = function(){}();
中不需要给函数命名。
你将foo
设置为函数的返回值,而在你的情况下,这个返回值是undefined
,因为在JavaScript中所有的函数都会返回一些东西。
var foo = function(){}()
第一个代码块中的'function'在表达式位置,而不是声明位置。另一方面,第二个代码块在顶层工作,作为函数声明。也就是说,'function'可以在两个不同的上下文中使用,并且可能有微妙的不同含义。
如果您想创建没有名称的匿名函数,则需要使用函数表达式。由于JavaScript语言语法的工作方式,根据Dave Newton的提醒,在某些情况下需要使用括号,因为放置'function'单词的位置可能会与其声明版本混淆(这需要一个名称)。