为什么这个表达式中需要括号?

Why are parentheses needed in this expression?

在以下代码片段中:

// Error code:
(y,...x) => {...x,y};
// output = "SyntaxError: Unexpected token ..."

// Expected result:
(y,...x) => ({...x,y});

我不太明白为什么需要“()”来包围对象字面量。我怀疑这是由于传播运算符,因为当我删除它时我不再需要括号。我肯定在这里遗漏了一些明显的东西?

{x,y} 是一个计算 xy 的块,不执行任何操作,并且 returns undefined.

添加 ... 会将其变成语法错误,因为那不是有效的语句。

括号强制将其解析为表达式。

需要括号才能隐式地return来自箭头函数的对象文字

如果没有括号,大括号将被视为函数的主体,因此它们有助于强制解析器将对象文字视为表达式,这样它就不会被视为块语句。

(y,...x) => ({ ...x, y });

相当于:

(y,...x) => { return { ...x, y }; };