在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