我尝试了以下代码:
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)之后发生。那么问题是什么?
答案 0 :(得分:5)
这种情况正在发生,因为您的第二个a
变量被“提升”到函数的顶部,它隐藏了第一个a
。实际发生的是:
var a = 5;
function x() {
var a;
console.log(a);
a = 1;
}
x();
Here is an article on hoisting from adequately good有关此主题的进一步阅读。
答案 1 :(得分:0)
var a = 5;
function x() {
var a = 1;
console.log(a);
}
x();
您需要在console.log();
之前初始化变量a