为何JavaScript循环内变量计数为0、1、2,循环外变量计数为0、1、2、3?
为什么JavaScript循环内外的i输出结果不一样?
先把你的代码贴出来方便分析:
let i = 0; for (i = 0; i < 3; i++) { console.log(i); } console.log(i);
首先得纠正一个小误解:这段代码运行后,循环外部只会输出一个3,不是你说的0、1、2、3哦!接下来咱们一步步拆解背后的原因:
变量作用域是关键:你用
let声明的i是在循环外面的,所以整个代码块里的i都是同一个变量——循环里用的和循环外打印的是同一个东西,不是各自独立的局部变量。如果把let i = 0放到for的小括号里(比如for (let i = 0; ...)),那循环外就访问不到i了,但这里的写法不是这样。循环的执行流程得掰碎了看:
- 一开始你已经
let i = 0了,但for循环又执行了初始化语句i = 0,结果还是i=0; - 接着判断条件
i < 3:0<3成立,进入循环体,执行console.log(i),输出0; - 循环体跑完后,执行
i++,i变成1; - 回到条件判断:1<3成立,进入循环体输出1,然后
i++变成2; - 再次判断:2<3成立,进入循环体输出2,然后
i++变成3; - 现在判断
i <3:3<3不成立,循环直接结束; - 最后执行循环外的
console.log(i),此时i的值已经是3了,所以输出3。
- 一开始你已经
如果想让循环结束后外部访问不到i,或者不想让i保留3这个值,只要把变量声明移到for循环内部就行,比如:
for (let i = 0; i < 3; i++) { console.log(i); } // 这里如果写console.log(i)会直接报错,因为i是循环的局部变量
内容的提问来源于stack exchange,提问作者Yannick
相关产品推荐
相关产品推荐

