页面卡死等现象大概率是死循环锁死主线程;需立即暂停脚本执行恢复编辑,区分死循环与长任务,重点检查for/while中赋值误用、条件不更新、浮点数比较等高危结构,并用分批处理规避。

遇到页面卡死、右键失灵、开发者工具打不开、刷新键无反应,大概率是死循环——它不是“慢”,而是彻底锁死了主线程。排查关键在于快速中断、准确定位、安全修复。
一、立即中断执行,恢复可编辑状态
死循环发生时,脚本已完全霸占主线程,必须手动干预:
- 打开浏览器开发者工具(F12),切换到 Sources 面板
- 页面卡住瞬间,点击左上角⏸️(暂停脚本执行)按钮
- 鼠标长按该按钮,选择 Stop script execution
- 此时可正常进入宜搭JS面板或源码编辑器,注释或删除问题代码
二、区分死循环和长任务
别把卡顿都当成死循环。真死循环的表现更极端:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 页面瞬间冻结:无法右键、无法切换标签页、地址栏输入无响应
- Performance 面板中出现持续超长的红色脚本执行块(>500ms 且无间断)
- 而“滚动卡顿”“按钮偶尔响应”通常是长任务(如遍历10万条数据),不是死循环
三、定位代码中的高危循环结构
重点检查 for 和 while 语句,常见错误包括:
立即学习“Java免费学习笔记(深入)”;
- 条件表达式误用赋值符:
for (let i = 0; i = 10; i++)→ 应为i - 递增/递减逻辑缺失或反向:
for (let i = 5; i > 0; i++)→ 会无限执行,应为i-- - while 条件依赖外部变量但未更新:
while (data.length > 0) { process(data[0]); }→ 忘记data.shift() - 浮点数严格相等判断:
while (x !== 1.0)→ 改为while (x
四、预防性加固:加防护机制再上线
对逻辑复杂或条件不可控的循环,不依赖人工检查,主动设防:
- 设最大迭代次数:
let count = 0; while (condition && count++ - 设时间上限:
const start = performance.now(); while (condition && performance.now() - start (控制在单帧内) - 避免同步轮询:
while(true)必须替换为setTimeout或requestAnimationFrame - 大数据处理必切片:
queueMicrotask(() => processNextBatch()),每次只处理200~500项

















