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

dip*_*dip -4 javascript

 a = 10;

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

abc();
Run Code Online (Sandbox Code Playgroud)

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

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

Ram*_*lfc 5

function abc() {
 console.log(" a is " + a);
var  a =5;
console.log("after a is " + a);
}
Run Code Online (Sandbox Code Playgroud)

这是因为吊装而变成的

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

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