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
相关产品推荐
相关产品推荐

