javascript javascript箭頭函數 - ECMAScript6箭頭函數返回一個對象




arrow function (4)

您必須將返回的對象字面值包裝到括號中。 否則,大括號將被視為表示該函數的主體。 以下工作:

p => ({ foo: 'bar' });

您不需要將任何其他表達式包含在括號中:

p => 10;
p => 'foo';
p => true;
p => [1,2,3];
p => null;
p => /^foo$/;

等等。

從箭頭函數返回對象時,由於語法中的含糊不清,似乎有必要使用額外的一組{}和一個return語句:

p => { return { foo: 'bar' } }

如果箭頭函數返回其他內容,則{}和返回是不必要的,例如:

p => 'foo'

有什麼明顯的我失踪?


如果箭頭函數的主體用大括號包裹,則不會隱式返回。 將對象包裹在圓括號中。 它看起來像這樣。

p => ({ foo: 'bar' })

通過將身體包裹在parens中,該函數將返回{ foo: 'bar }

希望能解決您的問題。 如果不是的話,我最近寫了一篇關於箭頭函數的文章,其中更詳細地介紹了它。 希望對你有幫助。 Javascript的箭頭函數


您可能會想,為什麼語法是有效的(但不能按預期工作):

var func = p => { foo: "bar" }

這是因為JavaScript的標籤語法

所以如果你將上面的代碼轉換成ES5,它應該看起來像這樣:

var func = function (p) {
  foo:
  "bar"; //obviously no return here!
}

給出了一個例子,他將一個指定的函數命名為能夠shortcut()用作自身的內部引用。John Resig給出了另一個例子 - 在他的Learning Advanced Javascript教程中復制分配給另一個對象的遞歸函數。雖然向屬性分配函數並不是嚴格意義上的問題,但我建議您主動嘗試教程 - 通過單擊右上角的按鈕運行代碼,然後雙擊代碼進行編輯以符合您的喜好。

本教程中的示例:遞歸調用yell()

刪除原始ninja對象時測試失敗。(第13頁)

var ninja = { 
  yell: function(n){ 
    return n > 0 ? ninja.yell(n-1) + "a" : "hiy"; 
  } 
}; 
assert( ninja.yell(4) == "hiyaaaa", "A single object isn't too bad, either." ); 

var samurai = { yell: ninja.yell }; 
var ninja = null; 

try { 
  samurai.yell(4); 
} catch(e){ 
  assert( false, "Uh, this isn't good! Where'd ninja.yell go?" ); 
}

如果命名將以遞歸方式調用的函數,則測試將通過。(第14頁)

var ninja = { 
  yell: function yell(n){ 
    return n > 0 ? yell(n-1) + "a" : "hiy"; 
  } 
}; 
assert( ninja.yell(4) == "hiyaaaa", "Works as we would expect it to!" ); 

var samurai = { yell: ninja.yell }; 
var ninja = {}; 
assert( samurai.yell(4) == "hiyaaaa", "The method correctly calls itself." );




javascript ecmascript-6 arrow-functions