JavaScript带递增运算符的for循环深度解析:无限循环与未执行问题
两段for循环的差异解析
先明确for循环的核心执行流程:
- 第一步:执行初始化语句(仅执行一次)
- 第二步:计算条件判断表达式的值:
- 若结果为真(JavaScript中非0、非NaN、非空字符串等),进入循环体执行代码
- 若结果为假(0、NaN、""、null、undefined等),直接终止循环
- 第三步:循环体执行完成后,执行后置操作语句,然后回到第二步重复判断
第一段:无限循环的代码
代码:
for (i=0;++i;){ console.log(i) }
执行过程拆解
- 初始化:
i=0,这步只做一次 - 条件判断:执行
++i(前置自增)——先把i加1变成1,再返回这个新值1 - 1是真值,所以进入循环体打印i(此时i是1)
- 循环体执行完,回到条件判断,再次执行
++i,i变成2,依然是真值,继续循环 - 这个过程会一直重复:每次判断前都先把i加1,只要i不是0/假值就会继续循环。哪怕i加到
Number.MAX_SAFE_INTEGER后再自增变成Infinity,Infinity依然是真值,所以会无限循环下去。
第二段:完全不执行的代码
代码:
for (i=0;i++;){ console.log(i) }
执行过程拆解
- 初始化:
i=0,同样只做一次 - 条件判断:执行
i++(后置自增)——先返回i的当前值0,再把i加1变成1 - 0是假值,所以直接终止循环,根本不会进入循环体
- 虽然之后i会被自增为1,但循环已经结束了,所以
console.log(i)一次都不会执行
核心差异总结
++i是先自增,再返回新值,所以第一次判断时i已经是1(真值),触发循环i++是先返回当前值,再自增,第一次判断时用的是初始化的0(假值),直接终止循环
内容的提问来源于stack exchange,提问作者Gokulraj subramani
相关产品推荐
相关产品推荐

