需要解释javascript中的作用域问题

Need explaination about scope issue in javascript

本文关键字:作用域 问题 javascript 解释      更新时间:2023-09-26

我有这样的代码

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

现在,当我第一次阅读这段代码时,我认为它会两次警告"hello",但我得到的结果是它第一次警告"undefined",第二次警告"hello"。谁能给我解释一下为什么?

在JavaScript中,函数中的所有var声明都被视为出现在函数体的最顶部,无论它们实际上在代码中的哪个位置。因此,您的函数被解释为如下所示:

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

注意,这只是声明被这样解释;初始化表达式发生在代码中var实际所在的位置。因此,您的函数定义了一个名为"variable"的局部变量,它隐藏了更全局的变量。在alert()运行时,变量还没有初始化。

您要做的是在初始化变量之前提醒它。你想要的是: function say_hello() { var variable = "bye"; alert(variable); }

这将给您预期的结果。就像其他人说的var关键字将使'scope local'。你是defining变量after you alert it在say_hello所以它是undefined。使用'全局作用域',如果你在say_hello中赋值"bye",你不会得到两次"hello"警报。

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