2013-06-03 52 views
4

在JavaScript中,从函数末尾落下返回undefined;如果要返回值,则需要使用明确的return语句。在没有显式返回语句的情况下返回一个值

至少这是迄今为止的情况,但它看起来像ECMAScript 6至少有时会允许return被省略。

在什么情况下会出现这种情况?它会与function=>之间的区别有关还是存在其他一些标准?

+1

'new'关键字在以前的ES版本中已经可以使用:-) – Bergi

+0

ECMAScript 6中的此更改何时会逐渐下降到现代浏览器支持的JavaScript?另外,你是什么意思'返回'被省略?在当前的javascript中不能返回被忽略:“在JavaScript中,函数结束时返回undefined”?你的意思是返回一个值,即使返回被忽略?请澄清。 –

+0

@meewoK我的意思是我从我所能找到的印象中得到的印象是,你不能将继承函数写成'function(x){x + 1}',但是你可以把它写成' x => x + 1',但我不知道差别的确切标准是什么。 – rwallace

回答

5

关于此主题的权威材料是最新的ES Harmony specification draft,特别是衍生自arrow function syntax proposal的部分。为了方便起见,可以找到一个非官方的HTML版本here

简而言之,这个新的语法将允许更简洁地定义函数。 ES规格草案包含所有细节,我会在这里粗略解释。

的语法是

ArrowParameters => ConciseBody 

ArrowParameters部分定义了函数采用,例如参数:

()     // no arguments 
arg     // single argument (special convenience syntax) 
(arg)    // single argument 
(arg1, arg2, argN) // multiple arguments 

ConciseBody部分定义了功能的身体。这可以被定义为它总是被定义的,例如,

{ alert('Hello!'); return 42; } 

,或者在函数返回计算单个表达式,这样的结果的特殊情况:

theExpression 

如果这听起来比较抽象,这里有一个具体的例子。所有这些功能定义将是当前规范草案下的相同:

var inc = function(i) { return i + 1; } 
var inc = i => i + 1; 
var inc = (i) => i + 1; 
var inc = i => { return i + 1; }; 

顺便说一句,这种新语法正是C#使用,允许lambda函数的定义相同伟大语法。

相关问题