javascript - 需要解释 javascript 中的范围问题

标签 javascript scope

我有这个代码

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() 运行时,变量尚未初始化。

关于javascript - 需要解释 javascript 中的范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127491/

相关文章:

java - 在扩展 Java 中另一个类的类中有 2 个同名变量

c++ - 如果 C++ 在 if 语句中创建对象时出现范围问题

javascript - 正确测试 backbone.js 中的路由器?

javascript - 如何使用 jQuery 在页面内定位字符串/电子邮件地址

javascript - Chrome 浏览器中的 JS 弹出窗口和 Android 中的 Webchrome 客户端的不同行为

javascript - 使用指令的范围而不是 Controller 的范围

javascript - 为什么即使稍后在代码中定义了局部变量,全局变量也无法访问

javascript - MEAN.JS 堆栈 $http.post().success() 将变量传递到 success() 匿名函数作用域问题

javascript - 如何检查速度动画

javascript - 是否可以在 IE11 中使用 "document.all"而不更改每个用法?