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

JavaScript中for循环内const变量可赋不同值?const用法疑问

const在for...of循环中的用法说明

你对const的认知存在的核心误区是:混淆了「同一作用域下的变量重赋值」和「不同块级作用域下的全新变量声明」两种场景。
const的核心规则是:在同一块级作用域内,const声明的变量只能在声明时赋值一次,后续不允许再对该变量进行重赋值操作,它并没有限制不同作用域下可以声明同名的const变量并赋予不同值。

为什么示例代码可以正常运行?

for...of循环的每一轮迭代都会生成一个独立的块级作用域,你在循环体内写的const index = allStats.indexOf(stat),本质是在每个独立的迭代作用域中分别创建了全新的index变量,各自只赋值一次,完全符合const的使用规则。
你可以把这个逻辑等价理解为如下代码:

// 第一轮迭代作用域
{
  const index = allStats.indexOf(stat1);
  console.log(filenames[index], stat1.isFile());
}
// 第二轮迭代作用域
{
  const index = allStats.indexOf(stat2);
  console.log(filenames[index], stat2.isFile());
}
// 后续迭代以此类推

不同块级作用域的同名const变量互不影响,自然不会触发报错。

可对比验证的反例

如果是同一块级作用域下对const变量重赋值,就会触发语法报错,符合你之前的认知:

const index = 0;
index = 1; // 抛出TypeError: Assignment to constant variable.

另外如果把const写在传统for循环的头部,也会报错,因为传统for循环的头部变量属于同一个作用域,i++是对同一个变量重赋值:

// 运行报错
for(const i = 0; i < 5; i++){
  console.log(i)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:06:02