2

我尝试了以下代码:

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) 之后发生。那么问题是什么?

4

2 回答 2

5

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

var a = 5;

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

x();

这是一篇关于提升的文章,非常适合进一步阅读该主题。

于 2013-03-30T03:48:46.430 回答
0
var a = 5;

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

x();

您需要在 console.log() 之前初始化变量 a;

于 2013-03-30T04:07:08.703 回答