4 回答

TA貢獻1858條經驗 獲得超8個贊
第二個功能很有趣。第二個函數不創建對象。它是一個帶有塊{}
和標記語句的函數。您可以通過向對象文字添加另一個屬性來驗證它,它會拋出錯誤:
const?function2?=?(name)?=>?{?{?username:?name,?firstname:?name?}?}
它被這樣解釋,這是一個無效的標簽:
const function2 = (name) => {
? {
? ? username: name,
? ? firstname: name
? }

TA貢獻1789條經驗 獲得超10個贊
單線箭頭函數將返回結果值。
例如:
const add = (a, b) => a + b;
而多行箭頭函數(或使用{&定義的箭頭}函數不會返回值:
const add = (a, b) => {
a + b;
};
為了讓上面的返回一個值,你需要 return 關鍵字:
const add = (a, b) => {
return a + b;
};
令人困惑的部分
你的情況有點混亂,因為你正在處理一個對象文字:
{ username: name }
此語法表示一個“對象”。javascript 中的對象類似于其他語言中的關聯數組——也就是說,它們就像以字符串作為索引的數組。你會看到一個常見的例子是這樣的:
const person = { name: 'Joseph', age: 33 }
// output the name:
console.log(person.name);
// output the age:
console.log(person.age);
因此,通過在第一個示例中將對象文字包裝在括號中,您可以將其維護為單行箭頭函數并返回對象文字。第二個例子實際上是一個多行定義,它將再次......沒有返回值。

TA貢獻1831條經驗 獲得超10個贊
不同之處在于,一個沒有 return 語句,而另一個有 return 語句的縮寫形式,可以在箭頭函數中用于返回對象而無需明確的 return 語句。
// invalid syntax
const foo = () => {returns: 'object'}
// valid syntax
const foo = () => ({returns: 'object'})
// long form would look like
const foo = () => {
return {returns: 'object'}
}
問題是,當你寫的時候foo = () => {returns: 'object'},引擎怎么知道你要返回一個對象,而不是在看到 {} 大括號時打開一個函數體?
為了讓引擎知道它應該是一個應該返回的對象,您可以將它包裝在父對象中。

TA貢獻1836條經驗 獲得超3個贊
這兩個功能都是arrow functions
.
Function 1
是一個隱式返回箭頭函數,因此即使return
未使用顯式{username: name}
,也會返回該對象。
功能 1
const?function1?=?name?=>?({username:?name})
當使用隱式返回箭頭函數以及要返回的對象時,應該將其包裝在()
.?如果我們不將它包裝在{...}
or中(...)
,那么它將是一個無效的語法
//Invalid?syntax?-->?Will?throw?an?error.?Hence?it?should?be?wrapper?with?`()` const?function1?=?name?=>?{username:?name}
Function 2
但是函數定義中的 as包裝在{ ... }
.?由于函數中沒有 return 語句,因此不會返回任何內容。
功能二
const?function2?=?(name)?=>?{?{username?:?name?}}
添加回答
舉報