【发布时间】:2011-12-26 13:35:57
【问题描述】:
为什么我会写作
var foo = function(){}();
但不能
function(){}();
有什么设计原因吗?
【问题讨论】:
-
函数声明与函数语句,重复已经存在。
标签: javascript
为什么我会写作
var foo = function(){}();
但不能
function(){}();
有什么设计原因吗?
【问题讨论】:
标签: javascript
第一个例子是一个赋值:右边是一个表达式,匿名函数的立即执行是有意义的。
第二个例子是一个声明:一旦关闭"}"被击中,声明就结束了。 Parens 本身不有意义——它们必须包含一个表达式。结尾的 ")" 是一个错误。
独立的声明必须变成表达式:
(function() {})(); // Or...
(function() {}());
首先使声明成为表达式,然后执行结果。第二个将声明和执行都变成一个表达式。
【讨论】:
(function(){}());
(function(){}()); 语法。
您可以(function(){})();,但您没有将函数命名为:var foo = function(){}();
您将 foo 设置为函数的返回值,在您的情况下为 undefined,因为所有函数都返回 JavaScript 中的内容。
【讨论】:
函数的第一次使用
var foo = function(){}()
在表达式位置,而不是语句位置。另一方面,第二个位于顶层,用作函数语句。也就是说,“功能”可以在两种不同的上下文中使用,并且可以表示微妙的不同。
如果你想创建没有名字的匿名函数,你可以使用函数表达式。而且,正如 Dave Newton 所提到的,仅仅因为 JavaScript 语言语法的工作方式,您需要在特定上下文中使用括号,因为您放置“函数”一词的位置可能会与其语句版本混淆(这确实需要一个名字)。
【讨论】: