JS中while循环使用含continue的if条件时浏览器无法加载页面
问题根因
代码存在逻辑错误,触发了无限死循环,直接阻塞浏览器主线程,导致页面无法正常加载、热重载功能失效,和浏览器兼容性、continue关键字本身无关。
死循环触发逻辑
你的while循环执行流程存在漏洞:
- 初始循环变量
w = 10,循环判定规则为w <= 15时持续执行循环体 - 循环体内先打印当前w值,再判断如果
w == 13就执行continue continue的核心作用是直接跳过当前循环剩余的所有代码,立刻跳转回循环条件判断位置,开启下一轮循环- 当w自增到13时,会触发if分支执行
continue,分支后面的w++自增语句被直接跳过 - 此时w的值永远停留在13,下一轮循环判定
13 <= 15永远成立,会重复执行「打印13→触发continue→跳过自增」的流程,无限循环卡死线程。
为什么for循环没有问题
for循环的变量自增逻辑写在循环头部,哪怕循环体内触发continue,JS引擎也会先执行头部的自增表达式,再进入下一轮条件判断,不会出现循环变量不更新的情况,因此不会触发死循环。
修正方案
写while循环搭配continue时,必须保证所有触发continue的分支,都不会跳过循环控制变量的更新逻辑,两种常见正确写法如下:
- 在触发continue的分支内提前完成变量自增
let w = 10; while(w<=15){ console.log(w) if(w==13){ w++; // 跳转下一轮前先更新变量值,避免卡死 continue; } w++ };
- 把变量自增逻辑放到循环条件位置,从结构上避免漏写
let w = 10; // 条件判断完成后立刻执行自增,不受循环体内continue影响 while(w <= 15){ if(w == 13){ w++; console.log('跳过值13') continue; } console.log(w) w++ };
额外提示:你提供的HTML代码存在结构不规范问题,
<head>标签只能作为<html>的直接子元素,不能嵌套在<body>内部,该问题不会触发JS死循环,但不符合HTML编写规范,建议修正。
内容的提问来源于stack exchange,提问作者user19361752
相关产品推荐
相关产品推荐

