为何for循环外迭代变量i为3?循环内最后一次仅输出2
为什么for循环结束后i的值是3?
这是JavaScript的for循环执行流程和变量作用域共同作用的结果,拆解具体过程就能明白:
首先明确for循环的固定执行顺序:
- 第一步:执行初始化表达式(也就是代码里的
i = 0) - 第二步:判断条件表达式(
i < 3),结果为true就进入循环体执行代码 - 第三步:循环体代码执行完毕后,执行递增表达式(
i++) - 第四步:回到第二步重复判断条件,直到条件为false时终止循环
对应你的代码,每一步的变量变化如下:
- 初始化
i = 0,条件0 < 3成立,进入循环体输出0 from for loop,之后执行i++,i变成1 - 条件
1 < 3成立,进入循环体输出1 from for loop,执行i++,i变成2 - 条件
2 < 3成立,进入循环体输出2 from for loop,执行i++,i变成3 - 此时判断条件
3 < 3,结果为false,循环终止
另外,你的代码里i是用let在循环外部声明的,这意味着循环内外的i是同一个变量。循环终止时,i已经被递增到3,所以外部访问i自然得到3。
如果把i的声明放到for循环的初始化里(比如for (let i = 0; i < 3; i++)),i的作用域就会被限制在循环内部,外部就访问不到这个变量了。
内容的提问来源于stack exchange,提问作者theSpellBinder
相关产品推荐
相关产品推荐

