You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

学习JS ES6剩余参数与扩展运算符时遇变量重复声明报错求解

JavaScript中array变量重复声明报错的原因解释

问题场景

学习ES6剩余参数(rest parameters)和扩展运算符(spread)时,测试以下代码:

const array = ['Javascript', 'PHP', 'RUBY', 'ReactJS'];
function logger(...rest){
console.log(rest);
}
logger(...array);

使用let或const声明array变量时,出现错误:

Uncaught SyntaxError: Identifier 'array' has already been declared

明明没有手动重复声明该变量,却触发了报错,以下是具体原因分析:

报错核心原因

这个错误的本质是当前代码运行的作用域中,array这个标识符已经被用let/const/class这类具有块级作用域的方式声明过了。这类声明遵循「同一作用域内禁止重复声明」的规则,哪怕你自己没写重复代码,也可能是环境或工具提前注入了同名变量。

常见触发场景

  • 浏览器控制台预定义变量:部分浏览器的开发者控制台会在全局作用域预注入一些调试用变量,array可能就是其中之一,且是用const/let声明的,你再次声明自然会冲突。可以在控制台先执行console.log(window.array)来验证是否存在全局的array变量。
  • 代码运行上下文冲突:如果这段代码是在某个已存在array变量的作用域中运行(比如之前加载的脚本已经声明过同名变量,或者在同一个块级作用域内有隐藏的重复声明),也会触发该错误。
  • 代码片段工具内部冲突:你使用的代码片段运行工具(即示例中的snippet组件),可能内部逻辑已经声明了array变量,导致你再次声明时产生冲突。

解决办法

  • 修改变量名:最直接有效的方式是把变量名换成不重复的标识符,比如techLanguages:
const techLanguages = ['Javascript', 'PHP', 'RUBY', 'ReactJS'];
function logger(...rest){
console.log(rest);
}
logger(...techLanguages);
  • 检查作用域环境:如果是在浏览器控制台测试,先确认全局作用域是否存在array变量,再决定是否换名;若必须用array,可以使用var声明(不推荐,因为var存在变量提升和作用域问题,但它允许同一作用域内重复声明)。

内容的提问来源于stack exchange,提问作者Nguyễn Thế Hưng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:51:11