为何无限循环输出数组元素时首元素仅首次出现?
问题原因分析
你的代码之所以首次遍历后不再输出第一个元素,核心是没搞清楚for循环的完整执行顺序:
先看你的代码:
li = [1, 2, 3, 4, 5] for (i=0; i<li.length; i++) { console.log(li[i]) if (i+1 == li.length) { i = 0 } }
for循环的执行流程是固定的四步循环:
- 初始化变量(仅第一次执行)
- 判断
i < li.length,成立则进入循环体
- 判断
- 执行循环体内的所有代码
- 执行循环头的
i++,然后回到步骤2
- 执行循环头的
对应你的代码执行细节:
- 第一次遍历到
i=4时,打印5,此时触发if条件,把i手动设为0 - 循环体执行完后,for循环会自动执行
i++,i直接变成1 - 下一次循环从
i=1开始,打印2;之后每次循环到i=4时,你把i设为0,紧接着又会执行i++变成1,永远跳不到i=0的状态,自然不会再输出1
要修复的话,只需要把i设为-1,这样执行i++后i刚好变成0,下一次循环就能输出1:
li = [1, 2, 3, 4, 5] for (i=0; i<li.length; i++) { console.log(li[i]) if (i+1 == li.length) { i = -1 } }
内容的提问来源于stack exchange,提问作者Abraam
相关产品推荐
相关产品推荐

