Наличие точки с запятой после синтаксиса расширения jn javascript прерывает выполнение с ошибкой «Неожиданный токен =» - PullRequest
0 голосов
/ 23 июня 2018

Может кто-нибудь объяснить мне, почему

const getabc = ()=> ({a:'aa',b:'bb',c:123});
let a, b, c;
{ a, b, c } = {...getabc()}

это работает

и

const getabc = ()=> ({a:'aa',b:'bb',c:123});
let a, b, c;
{ a, b, c } = {...getabc()};

это не так (обратите внимание на точку с запятой в конце)

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Это не имеет ничего общего с синтаксисом расширения или точками с запятой.

Назначениям деструктуризации объектов, которым не предшествует что-то вроде var, const или let, должны использоваться скобки (или в некоторых другихпроисходит как выражение внутри более крупного оператора, содержащего его), потому что в противном случае JS будет анализировать открывающую фигурную скобку как начало блока:

const getabc = ()=>({a:'aa',b:'bb',c:123});
let a, b, c;
({ a, b, c } = {...getabc()});

В то же время здесь нет смысла использовать синтаксис разброса, поэтому вы можете удалить это:

const getabc = ()=>({a:'aa',b:'bb',c:123});
let a, b, c;
({ a, b, c } = getabc());
0 голосов
/ 23 июня 2018

Вы пропустили круглые скобки согласно документации MDN :

Переменной может быть присвоено ее значение с деструктуризацией отдельно от его декларация.

var a, b;

({a, b} = {a: 1, b: 2});

const getabc = ()=>({a:'aa',b:'bb',c:123});
let a, b, c;
({ a, b, c } = {...getabc()});
console.log(a,b,c);

Я предполагаю, что первая ошибка в реализации Chrome, поскольку Firefox выдает ошибку.

Chrome

enter image description here

Firefox

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...