需要在javascript中解释范围问题

时间:2014-08-04 21:02:47

标签: javascript scope

我有这段代码

var Variable = "hello";

function say_hello ()
{
    alert(Variable);
    var Variable = "bye";
}

say_hello();
alert(Variable);

现在,当我第一次阅读这段代码时,我认为它会提醒"你好"两次,但我得到的结果是它警告" undefined"第一次和"你好"第二次。有人可以向我解释原因吗?

3 个答案:

答案 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);