2013-06-03 79 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函數的定義相同偉大語法。

相關問題