我有这段代码
var Variable = "hello";
function say_hello ()
{
alert(Variable);
var Variable = "bye";
}
say_hello();
alert(Variable);
现在,当我第一次阅读这段代码时,我认为它会提醒"你好"两次,但我得到的结果是它警告" undefined"第一次和"你好"第二次。有人可以向我解释原因吗?
答案 0 :(得分:7)
在JavaScript中,函数中的所有var
声明都被视为它们出现在函数体的最顶层,无论它们实际位于代码中的哪个位置。因此,您的函数被解释为它是这样编写的:
function say_hello() {
var Variable;
alert(Variable);
Variable = "bye";
}
请注意,它只是声明以这种方式解释;初始化表达式发生在var
实际位于代码中的位置。因此,您的函数定义了一个名为" Variable"的局部变量,它隐藏了更全局的变量。在alert()
运行时,该变量尚未初始化。
答案 1 :(得分:1)
您要做的是在初始化变量之前警告变量。
你想要的是:
function say_hello() {
var variable = "bye";
alert(variable);
}
答案 2 :(得分:0)
这将为您提供预期的结果。与其他人一样,var
关键字会使“范围本地”。您在say_hello中defining
变量after you alert it
,因此它是undefined
。使用“全局范围”如果在say_hello中分配“bye”,则不会两次“hello”警告。
var Variable = "hello";
function say_hello ()
{
alert(Variable);
//Variable = "bye";
}
say_hello();
alert(Variable);