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

为什么JS中使用let在for循环重复声明同名变量不会报错?

let重复声明行为差异的技术逻辑
  • 首先明确let的核心语法规则:ES6规范中,let仅禁止同一词法作用域内的重复声明,跨作用域的同名变量声明不受限制。

示例1报错原因

示例1中两次let v声明都处于同一个顶层作用域(全局作用域),属于同一作用域下的重复声明,因此直接触发语法错误:
Uncaught SyntaxError: Identifier 'v' has already been declared
对应代码:

let v = "1";
let v = "1";

示例2不报错的原因

带let声明迭代变量的for循环,每一轮迭代都会创建一个完全独立的块级作用域,各轮次的作用域互相隔离。
示例2中let v = "1"是声明在每一轮迭代的独立作用域内,不同轮次的v属于不同作用域下的独立变量,不存在同一作用域重复声明的情况,因此不会触发报错。
对应代码:

for(let i = 0; i<=2; i++){
    let v = "1"
}

补充验证

如果在同一轮迭代的同一个块作用域内重复声明v,依然会触发报错,可验证上述逻辑:

for(let i = 0; i<=2; i++){
    let v = "1"
    let v = "2" // 此处会触发重复声明错误
}

内容的提问来源于stack exchange,提问作者Ali Hsaino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:00