解决点击confirm取消按钮无法终止while循环的问题
问题解决:confirm取消后循环无法终止的修复
问题根源
你代码里的循环一直停不下来,核心原因是循环内部重新用let声明了askAgain变量——这会创建一个仅在循环块内生效的局部变量,和外层控制循环的askAgain完全是两个独立变量。每次循环里点击取消,修改的只是这个局部变量,外层的循环条件askAgain == true永远没变,自然会一直弹出对话框。
修复后的代码
// 把重复的年龄判断逻辑抽成函数,减少冗余 function checkDrivingAge(age) { if (age <= 0) { alert('Enter a valid age') console.error('Enter a valid age'); return; } age < 18 ? alert('You cannot drive') : alert('Yes you can drive') } // 首次执行年龄校验 let age = Number(prompt('Enter your age')) checkDrivingAge(age) let askAgain = confirm('Do you want to see the prompt again?') while (askAgain) { age = Number(prompt('Enter your age')) checkDrivingAge(age) // 去掉let,直接更新外层的askAgain变量 askAgain = confirm('Do you want to see the prompt again?') }
关键修改点
- 移除循环内的
let声明:循环里直接给外层已定义的askAgain赋值,点击取消后askAgain会变为false,循环条件不满足就会终止。 - 抽离重复逻辑:把两次相同的年龄判断写成函数,避免代码冗余,后续修改逻辑也更方便。
- 简化循环条件:
confirm本身返回布尔值,直接写while (askAgain)即可,没必要额外判断== true。
内容的提问来源于stack exchange,提问作者Hemant Sharma
相关产品推荐
相关产品推荐

