为何会出现Uncaught SyntaxError: Identifier 'total'已声明错误?
错误原因解析
核心原理
let 和 const 是ES6引入的变量声明方式,它们有两个关键特性:
- 拥有块级作用域(函数、
if/for代码块等都是独立的作用域) - 在同一个作用域内,不允许重复声明同一个标识符
针对你的代码分析
报错代码的问题
你在全局作用域声明了let total = 0,如果当前运行环境的全局作用域中(比如页面其他脚本、你之前写的代码片段),已经用let或const声明过total变量,就会触发Uncaught SyntaxError: Identifier 'total' has already been declared错误——因为全局作用域属于同一个块级作用域,let严格禁止重复声明同名变量。换变量名后正常的原因
换成sum后,全局作用域中没有其他代码用let/const声明过sum,自然不会触发重复声明的错误。变量放入函数内正常的原因
函数内部是一个独立的块级作用域,你在函数里声明的let total,和全局作用域的total是完全独立的两个变量,二者作用域互不重叠,所以不会有重复声明的冲突。
额外补充
如果用var声明变量,它没有块级作用域,且允许同一作用域重复声明(仅会覆盖变量值),但let/const的规则更严格,这也是ES6为了避免变量污染、提升代码可读性设计的特性。
内容的提问来源于stack exchange,提问作者Roy Miketsukami
相关产品推荐
相关产品推荐

