После точки с запятой после синтаксиса распространения jn javascript прерывает выполнение с ошибкой "Неожиданный токен ="

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

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 ответа

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

Назначения деструктуризации объектов, которым не предшествуют такие var, как const, 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());


Вам не хватает данных в соответствии с документацией 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 вызывает ошибку.

Хром

Fire Fox

licensed under cc by-sa 3.0 with attribution.