Зачем нужны скобки в этом выражении? - PullRequest
0 голосов
/ 16 апреля 2019

В следующем фрагменте кода:

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

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

Я не совсем понимаю, почему "()" необходимы для окружения литерала объекта. Я подозреваю, что это связано с оператором распространения, так как при его удалении мне больше не нужны скобки. Конечно, я что-то упускаю здесь очевидное?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

{x,y} - это блок, который оценивает x и y, ничего не делает и возвращает undefined.

Добавление ... превращает это в синтаксическую ошибку, поскольку это недопустимое утверждение.

Скобки заставляют его анализироваться как выражение.

1 голос
/ 16 апреля 2019

Скобки необходимы для неявного возврата литерала объекта из функции стрелки.

Без скобок скобки будут рассматриваться как тело вашей функции, поэтому они помогают заставить синтаксический анализатор обрабатывать литерал объекта как выражение, чтобы он не обрабатывался как оператор блока.

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

эквивалентно:

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