语句'if'变量声明



我的问题可能很尴尬。如果我知道具体要问什么问题,我会咨询谷歌,但唉,我是一个代码新手,因此不熟悉行话......

我正在遵循书面教程@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"中,则代码无法正常工作,这让我很失望(首先将其作为"全局"变量,必须检查解决方案,因为我找不到错误(。

我请你澄清为什么会这样。 :(

编辑我没有意识到我是不具体的。我是论坛的新手,不会再发生了。

代码不起作用,这意味着在第一个提示符中写入"Admin"不需要继续进入"通过"提示。仅当我不在"if"中嵌套"pass"声明时,才会发生此行为。我想我已经找到了答案,但想编辑以免进一步激怒社区。: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")
}

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

我的猜测是,您在单独的嵌套范围内或通过在使用后声明了通行证。let声明不像var声明那样hoisted。因此,必须在声明之后从同一范围或该范围的更嵌套范围访问它们。

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中的任何内容对所有人都可见,您的用户名和密码将不安全

我发现的唯一区别是,如果您从 if 块中删除行 (*(,脚本将要求用户输入 **userLoginpass,然后进行检查。如果您不这样做,脚本将要求用户登录,如果不正确,您将不会浪费时间要求通行证。正如其他人所说,最好解释一下您到底遇到了什么问题。

最新更新