javascript - JavaScript 中全局变量和局部变量的奇怪行为

标签 javascript scope

我尝试了以下代码:

var a = 5;

function x() {
  console.log(a);
}

x();

它按预期运行并打印 5。

但是我更改了代码,因此全局变量 a 将被覆盖,如下所示:

var a = 5;

function x() {
  console.log(a);
  var a = 1;
}

x();

它打印未定义。这对我来说没有意义,因为覆盖应该在 console.log(a) 之后发生。那么问题出在哪里呢?

最佳答案

发生这种情况是因为您的第二个 a 变量被“提升”到函数的顶部,并且隐藏了第一个 a。实际发生的事情是这样的:

var a = 5;

function x() {
  var a;
  console.log(a);
  a = 1;
}

x();

Here is an article on hoisting from adequately good进一步阅读有关该主题的内容。

关于javascript - JavaScript 中全局变量和局部变量的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15714752/

相关文章:

javascript - chrome.storage.local.get 调用时结果为 "Undefined"

javascript - Google Analytics 和访问过的链接 CSS

JavaScript 函数作用域行为

javascript - "fullpage js"上的滚动条

javascript - 获取绑定(bind)到 jQuery 插件的元素的属性

javascript - 选择列表框中的项目后启用按钮

scope - 如何在 Julia 中获取 `do` block 的值?

python - 为什么python在函数和类中使用不同的作用域机制?

MATLAB 错误? "Undefined function or variable"函数和变量使用相同名称时出错

jquery - 如何从 $.each(...) 返回一个值?