在JavaScript中,从函数末尾落下返回undefined
;如果要返回值,则需要使用明确的return
语句。在没有显式返回语句的情况下返回一个值
至少这是迄今为止的情况,但它看起来像ECMAScript 6至少有时会允许return
被省略。
在什么情况下会出现这种情况?它会与function
和=>
之间的区别有关还是存在其他一些标准?
在JavaScript中,从函数末尾落下返回undefined
;如果要返回值,则需要使用明确的return
语句。在没有显式返回语句的情况下返回一个值
至少这是迄今为止的情况,但它看起来像ECMAScript 6至少有时会允许return
被省略。
在什么情况下会出现这种情况?它会与function
和=>
之间的区别有关还是存在其他一些标准?
关于此主题的权威材料是最新的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函数的定义相同伟大语法。
'new'关键字在以前的ES版本中已经可以使用:-) – Bergi
ECMAScript 6中的此更改何时会逐渐下降到现代浏览器支持的JavaScript?另外,你是什么意思'返回'被省略?在当前的javascript中不能返回被忽略:“在JavaScript中,函数结束时返回undefined”?你的意思是返回一个值,即使返回被忽略?请澄清。 –
@meewoK我的意思是我从我所能找到的印象中得到的印象是,你不能将继承函数写成'function(x){x + 1}',但是你可以把它写成' x => x + 1',但我不知道差别的确切标准是什么。 – rwallace