JavaScript编写网站锁程序时,输入正确密码仍重复弹出密码输入框
核心故障原因
你写的代码无法终止循环,是两个逻辑漏洞导致的:
- 变量作用域完全隔离:
firstFunction内部用var psswrd定义的变量是函数级局部变量,这个变量存的prompt输入值,在函数执行结束后就会被销毁,根本传不到外层mainFunction的判断逻辑里。
你现在mainFunction里用来做判断的psswrd,是一开始就被赋值为"johndoe"的固定值,从代码运行开始就从来没被用户的输入更新过——不管用户在弹窗里输什么,这个判断值永远是初始的"johndoe",永远触发不了psswrd == "password"的正确分支,循环自然永远停不下来。 - 校验值前后不匹配:你在mainFunction里把目标密码设成了"johndoe",判断逻辑里却拿输入和"password"做对比,就算解决了传值的问题,两边基准值对不上也没法通过校验。
修正后的可运行代码
// 把prompt获取的用户输入通过return返回,解决跨函数传值的问题 function getPasswordInput() { return prompt("What is the password?") } function startSiteLock() { let lockStatus = true // 把正确密码单独定义为常量,避免多处写值导致的不匹配问题 const VALID_PASSWORD = "johndoe" // 锁定状态下持续弹出校验窗 while (lockStatus) { // 直接接收函数返回的用户输入,存在当前作用域内 const inputPwd = getPasswordInput() // 输入匹配正确密码时,修改锁定状态,终止循环 if (inputPwd === VALID_PASSWORD) { lockStatus = false } } } startSiteLock()
优化提示
- 定义状态变量和业务值时尽量用
let/const替代var,避免变量提升带来的不可控逻辑问题 - 可以补充取消按钮的兼容逻辑:当用户点prompt弹窗的“取消”按钮时,函数会返回
null值,可以针对这个场景加分支判断,避免无意义的重复弹窗
内容的提问来源于stack exchange,提问作者AIDAN GREEN
相关产品推荐
相关产品推荐

