Javascript:为什么两次声明相同变量的相同值?

时间:2016-08-28 13:28:46

标签: javascript function while-loop

我想要出现提示并要求用户输入正确的密码。每次用户键入错误的pw时,都会重新出现提示。我不明白为什么下面的代码不起作用:

var secret = prompt("What is the password?");
while ( secret !== "sesame" ) {
 secret;    
}
document.write("Welcome.");

如果"secret"是一个全局变量,那么在while循环中它应该被解释为具有值prompt("What is the password?")

但事实证明我应该在while循环中写secret = prompt("What is the password?");

var secret = prompt("What is the password?");
    while ( secret !== "sesame" ) {
     secret = prompt("What is the password?");    
    }
    document.write("Welcome.");

为什么要两次声明变量secret的相同值?

2 个答案:

答案 0 :(得分:2)

一行只是secret;的代码什么都不做 - 它仅仅引用了一个名为secret的变量,但没有做任何事情。

你的意思是:

var secret;
while(secret !== 'secretpassword') secret = prompt("What's the password?");

对于循环的第一次迭代secret不等于密码,因此运行提示。它会反复运行,直到输入正确的值。

但是,您的方法存在很多问题。

首先,持久的对话窗口(其中一个提示是一种)不是非常友好的UI;他们必然需要专注,所以你不能在不与他们互动的情况下点击他们。如果用户想要忽略提示并单击“忘记密码”链接或使用页面的其他部分,该怎么办?

其次,在JavaScript中存储密码是一个巨大而明显的安全风险,但我认为这是一个教程或某种类型的家庭作业,其重点不在于安全性。

第三,document.write()很久以前就被弃用了,而且这些天几乎没有用。而是转向DOM脚本。

答案 1 :(得分:0)

在变量中指定表达式时,变量仅包含该表达式返回的值,而不包含表达式本身

因此,评估变量不会产生任何影响,并且不会再次评估指定的表达式。

如果您不想重复此功能调用,可以使用do while循环

var secret;
do {
  secret = prompt("What is the password?");
} while ( secret !== "sesame" ); 

但当然,JS密码是无用的