You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript带递增运算符的for循环深度解析:无限循环与未执行问题

两段for循环的差异解析

先明确for循环的核心执行流程:

  • 第一步:执行初始化语句(仅执行一次)
  • 第二步:计算条件判断表达式的值:
    • 若结果为真(JavaScript中非0、非NaN、非空字符串等),进入循环体执行代码
    • 若结果为假(0、NaN、""、null、undefined等),直接终止循环
  • 第三步:循环体执行完成后,执行后置操作语句,然后回到第二步重复判断

第一段:无限循环的代码

代码:

for (i=0;++i;){      
  console.log(i)
}

执行过程拆解

  1. 初始化:i=0,这步只做一次
  2. 条件判断:执行++i(前置自增)——先把i加1变成1,再返回这个新值1
  3. 1是真值,所以进入循环体打印i(此时i是1)
  4. 循环体执行完,回到条件判断,再次执行++i,i变成2,依然是真值,继续循环
  5. 这个过程会一直重复:每次判断前都先把i加1,只要i不是0/假值就会继续循环。哪怕i加到Number.MAX_SAFE_INTEGER后再自增变成Infinity,Infinity依然是真值,所以会无限循环下去。

第二段:完全不执行的代码

代码:

for (i=0;i++;){      
  console.log(i)
}

执行过程拆解

  1. 初始化:i=0,同样只做一次
  2. 条件判断:执行i++(后置自增)——先返回i的当前值0,再把i加1变成1
  3. 0是假值,所以直接终止循环,根本不会进入循环体
  4. 虽然之后i会被自增为1,但循环已经结束了,所以console.log(i)一次都不会执行

核心差异总结

  • ++i是先自增,再返回新值,所以第一次判断时i已经是1(真值),触发循环
  • i++是先返回当前值,再自增,第一次判断时用的是初始化的0(假值),直接终止循环

内容的提问来源于stack exchange,提问作者Gokulraj subramani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:15:45