为什么`a`在下面的函数中未定义?

时间:2016-01-04 06:25:59

标签: javascript

 a = 10;

function abc() {
 console.log(" a is " + a);
var  a =5;
console.log("after a is " + a);
}

abc();

在上面的代码中,我的第一个console.log显示a为未定义,而第二个console.log显示a的结果为5。

我仍然试图理解为什么我的第一个控制台显示a未定义。我已经将变量a定义为全局变量。

2 个答案:

答案 0 :(得分:5)

function abc() {
 console.log(" a is " + a);
var  a =5;
console.log("after a is " + a);
}

因为提升而变成了

function abc() {
 var a;
 console.log(" a is " + a); // undefined
a =5;
console.log("after a is " + a); // 5
}

javascript具有词法范围,因此该函数在查看外部之前会查找a,并且因为它找到a = 5,它将提升它的声明。

答案 1 :(得分:1)

这是因为已再次声明变量a。无论您声明哪一行,变量a都具有块级范围。

这种情况是未定义的,因为声明了当时的var a,但没有提供任何值。

这就是我们所说的" Hoisiting "即

  

始终移动函数声明和变量声明   (“悬挂”)无形地到达其包含范围的顶部   JavaScript解释器