为什么这个表达式中需要括号?
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}
是一个计算 x
和 y
的块,不执行任何操作,并且 returns undefined
.
添加 ...
会将其变成语法错误,因为那不是有效的语句。
括号强制将其解析为表达式。
需要括号才能隐式地return来自箭头函数的对象文字。
如果没有括号,大括号将被视为函数的主体,因此它们有助于强制解析器将对象文字视为表达式,这样它就不会被视为块语句。
(y,...x) => ({ ...x, y });
相当于:
(y,...x) => { return { ...x, y }; };
在以下代码片段中:
// Error code:
(y,...x) => {...x,y};
// output = "SyntaxError: Unexpected token ..."
// Expected result:
(y,...x) => ({...x,y});
我不太明白为什么需要“()”来包围对象字面量。我怀疑这是由于传播运算符,因为当我删除它时我不再需要括号。我肯定在这里遗漏了一些明显的东西?
{x,y}
是一个计算 x
和 y
的块,不执行任何操作,并且 returns undefined
.
添加 ...
会将其变成语法错误,因为那不是有效的语句。
括号强制将其解析为表达式。
需要括号才能隐式地return来自箭头函数的对象文字。
如果没有括号,大括号将被视为函数的主体,因此它们有助于强制解析器将对象文字视为表达式,这样它就不会被视为块语句。
(y,...x) => ({ ...x, y });
相当于:
(y,...x) => { return { ...x, y }; };