我尝试了以下代码:
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/