我尝试了以下代码:
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) 之后发生。那么问题是什么?
我尝试了以下代码:
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();
这是一篇关于提升的文章,非常适合进一步阅读该主题。
var a = 5;
function x() {
var a = 1;
console.log(a);
}
x();
您需要在 console.log() 之前初始化变量 a;