You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 09:27:04