Uncaught SyntaxError: 'source'已重复声明,同JS代码Chrome报错freeCodeCamp正常
Chrome控制台重复声明报错原因
这段代码本身语法完全符合ES6+规范,没有逻辑错误,报错完全来自Chrome开发者工具的运行环境特性:
- 你使用
const关键字声明的source属于全局作用域变量,Chrome控制台的全局作用域默认会保留所有历史执行代码声明的let/const类型全局变量,如果你之前已经在控制台执行过这段代码、或者手动声明过同名的source变量,第二次执行时就会触发标识符重复声明的语法错误。 - freeCodeCamp的代码运行在平台内置的隔离沙箱环境中,每次触发代码运行都会创建一个全新的独立作用域,不会继承之前运行上下文的任何变量,自然不会出现重复声明冲突,所以可以正常运行。
可用解决方法
- 每次在Chrome控制台运行代码前先刷新页面,重置控制台的全局上下文,清除之前声明的全局变量后再执行代码即可正常运行
- 将代码包裹在立即执行函数中,避免变量泄漏到全局作用域,就不会出现全局变量冲突问题,示例如下:
(() => { const source = [1,2,3,4,5,6,7,8,9,10]; function removeFirstTwo(list) { const [,, ...arr] = list; return arr; } const arr = removeFirstTwo(source); console.log(arr); // 输出[3,4,5,6,7,8,9,10] })();
- 临时测试也可以将
const source修改为var source,var支持全局作用域下的重复声明,不过生产环境不推荐这种写法。
内容的提问来源于stack exchange,提问作者Premchand K
相关产品推荐
相关产品推荐

