打开网易新闻 查看精彩图片

去年某电商大促,一个 junior 开发把 i++ 写成了 i--。结果用户下单页面的循环永远跑不到头,服务器 CPU 飙到 100%,值班工程师找了 72 小时才定位到第 47 行的那个符号。

循环的本质是"重复",但重复一旦失控,就是灾难。

JavaScript 的循环结构不复杂,却藏着程序员最容易忽视的陷阱。for、while、do...while 三种写法,核心逻辑完全一致:先检查条件,再执行代码块,最后更新变量。这个顺序不能乱,变量更新更不能忘。

for 循环:最常用,也最容易写顺手

for 循环:最常用,也最容易写顺手

打开网易新闻 查看精彩图片

标准写法四步走:初始化变量 → 判断条件 → 执行代码 → 更新变量。以 for (let i = 0; i < 5; i++) 为例,i 从 0 开始,每次加 1,直到不小于 5 时停止。输出结果是 0、1、2、3、4,干净利落。

但很多人抄代码时会把 i++ 漏掉,或者写成 i = i 这类无操作。浏览器不会报错,循环条件永远为真,页面直接卡死。这就是 infinite loop(无限循环),前端表现为页面无响应,后端则是服务崩溃。

while 与 do...while:条件判断的两种姿势

while 与 do...while:条件判断的两种姿势

while 先验条件,可能一次都不执行;do...while 后验条件,至少执行一次。实际开发中,while 更常见于"不知道要循环多少次"的场景,比如等待某个异步状态变更。

打开网易新闻 查看精彩图片

但无论哪种,循环体内必须有改变条件的语句。这是铁律,没有例外。

一个真实的血泪教训

一个真实的血泪教训

2023 年某金融科技公司的事故报告显示,他们的风控系统曾因循环变量未更新导致内存泄漏,最终触发 OOM(内存溢出)自动重启。修复方案只有一行:把 while (true) 里的 break 条件从依赖外部接口,改为内部计数器递增。

循环是编程的基石,但基石松动,整座楼都会晃。你最近一次写循环时,有没有在提交前专门检查过那个不起眼的 i++