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

for循环中let声明变量的生命周期及代码输出差异疑问

为什么两段for循环代码的打印结果不同?

第一段代码:依次打印0至9

actions = []
for (let i = 0; i < 10; ++i) {
    actions.push(() => console.log(i))
}
for (const action of actions) {
    action()
}

第二段代码:十次打印数字10

actions = []
let i
for (i = 0; i < 10; ++i) {
    actions.push(() => console.log(i))
}
for (const action of actions) {
    action()
}

疑问与参考说明

根据for语句初始化部分的说明:

一个表达式(包括赋值表达式)或变量声明,在循环开始前执行一次。通常用于初始化计数器变量。该表达式可选择使用var或let关键字声明新变量。用var声明的变量不是循环局部变量,即与for循环处于同一作用域;用let声明的变量是语句的局部变量。

我原本理解为变量i仅被声明并初始化一次,且为for循环的局部变量,在迭代间持续存在,但实际表现却像是每次迭代都重新声明并以let i = previous_i++的方式初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:30:42