首页 > 解决方案 > 为什么我不能删除代码中的中间变量?

问题描述

我目前正在使用扩展语法并遇到了一个意想不到的问题。

下面的代码片段有效(如预期的那样),并且不会引发任何错误:

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);
});

如您所见,上面的代码片段抛出了一个错误:

Uncaught SyntaxError: Unexpected token ...

而第一个片段没有。为什么会这样?据我了解,我应该能够copy用它包含的文字数组替换它并且没有问题(正如我在第二个片段中所做的那样)。

我希望第二个片段的行为与第一个片段一样,并且不会引发任何错误。

注意:我知道[...arr]在这种情况下这似乎是多余的,我只是用它来证明我的问题。

标签: javascriptarraysecmascript-6syntaxspread-syntax

解决方案


添加一个分号,它可以完美地工作。

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

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

代码在没有换行符的情况下被评估 - 像这样:

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

这导致了你的错误。


推荐阅读