Почему я не могу удалить промежуточную переменную в своем коде?

#javascript #arrays #ecmascript-6 #syntax #spread-syntax

#javascript #массивы #ecmascript-6 #синтаксис #spread-синтаксис

Вопрос:

В настоящее время я работаю с синтаксисом spread и столкнулся с неожиданной проблемой.

Приведенный ниже фрагмент работает (как ожидалось) и не выдает никаких ошибок:

 const arr = [1, 2, 3, 4] // create array of numbers

const copy = [...arr] // make a shallow copy of the array
copy.forEach(n => { // loop through array
  console.log(n   1);
});  

Однако, если я удаляю промежуточную переменную copy , мой код, похоже, выдает ошибку:

 const arr = [1, 2, 3, 4] // create array of numbers

[...arr].forEach(n => { // loop through array
  console.log(n   1);
});  

Как вы можете видеть, приведенный выше фрагмент кода выдает ошибку:

Неперехваченная ошибка синтаксиса: неожиданный токен…

В то время как первый фрагмент не делает этого. Почему это происходит? Насколько я понимаю, я должен быть в состоянии заменить copy содержащийся в нем массив буквальным и не иметь проблем (как я сделал во втором фрагменте).

Я ожидаю, что второй фрагмент будет вести себя так же, как первый фрагмент, и не выдаст никаких ошибок.

Примечание: Я знаю, что в данном случае это [...arr] кажется избыточным, я просто использовал это, чтобы продемонстрировать свою проблему.

Ответ №1:

Добавьте точку с запятой, и это работает идеально.

 const arr = [1, 2, 3, 4];

[...arr].forEach(n => {
  console.log(n   1);
});  

Код вычислялся без перевода строки — вот так:

 const arr = [1, 2, 3, 4][...arr]
  

Что привело к вашей ошибке.