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
定义为全局变量。
答案 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解释器