'if'语句中的变量声明

时间:2018-06-26 15:44:09

标签: javascript variables if-statement

我的问题可能令人尴尬。如果我知道要具体问什么问题,我会咨询Google,但是,我是代码新手,因此对行话不熟悉...

我正在关注书面教程@ https://javascript.info。我正在上关于条件运算符和if语句的课程,无法将我的头缠在其中一个任务(http://javascript.info/ifelse#tasks)的行为上,尤其是任务4的行为。 “检查登录名”。

代码如下:

let userLogin = prompt("Who's there?", "");

if (userLogin == 'Admin') {

  let pass = prompt("Password?", ""); // *******    

  if (pass == 'TheMaster') {
    alert('Welcome!');
  } else if (!pass) {
    alert("Canceled.");
  } else {
    alert('I do not know you');
  }

} else if (!userLogin) {
  alert("Canceled");
} else {
  alert("I don't know you")
}

我的问题围绕(****)线。如果该行未嵌套在“ if”中,则代码将无法正常工作,这使我不知所措(首先将其作为“全局”变量,必须检查解决方案,因为我找不到该错误) 。

请问您,为什么要这样。 :(

修改 我没有意识到自己是不明确的。我是论坛的新手,不会再发生了。

该代码无效,这意味着在进入“通过”提示时无需在第一个提示中写入“管理员”。仅当我没有将“ pass”声明嵌套在“ if”中时,才会发生此行为。我认为我找到了答案,但想进行编辑以免进一步激怒社区。 :P

let userLogin = prompt("Who's there?", "");
let pass = prompt("Password?", ""); // ******* 

if (userLogin == 'Admin') {


  if (pass == 'TheMaster') {
    alert('Welcome!');
  } else if (!pass) {
    alert("Canceled.");
  } else {
    alert('I do not know you');
  }

} else if (!userLogin) {
  alert("Canceled");
} else {
  alert("I don't know you")
}

这就是我的意思-希望这可以澄清!再次抱歉。

2 个答案:

答案 0 :(得分:1)

我的猜测是,您在单独的嵌套作用域中拥有通行证,或者在使用通行证后对其进行了声明。 let声明不像hoisted声明那样var。因此,在声明之后,必须从相同的作用域或该作用域的更多嵌套作用域访问它们。

let userLogin = prompt("Who's there?", "");
let pass = prompt("Password?", ""); // *******    
if (userLogin == 'Admin') {

    

    if (pass == 'TheMaster') {
        alert('Welcome!');
    } else if (!pass) {
        alert("Canceled.");
    } else {
        alert('I do not know you');
    }

} else if (!userLogin) {
    alert("Canceled");
} else {
    alert("I don't know you")
}

好奇的情况下指向吊装定义的链接:https://developer.mozilla.org/en-US/docs/Glossary/Hoisting

PS-我希望这只是一个玩具问题...但是如果不是,请不要使用它来执行实际的身份验证。页面Javascript中的所有内容都是所有人可见的,并且您的用户名和密码是安全的。

答案 1 :(得分:0)

我发现的唯一区别是,如果从if块中删除行( *),脚本将要求用户提供** userLogin pass ,然后进行检查。如果您不这样做,脚本将要求输入 userLogin ,如果这不正确,则您不会浪费时间要求 pass 。正如其他人所说,最好是确切说明您遇到的问题。