重新声明时 javascript 中具有 inner/nested 功能的变量范围

scope of variable in javascript with inner/nested functions when redeclared

var name="prevName";
function printName(){
   console.log(name);
   var name="newName";
}
printName();

打印未定义

var name="prevName";
function printName(){
    console.log(name);
}
printName();

打印 prevName

我不明白为什么

你能请任何人解释为什么吗?

提前致谢....

在第一种情况下,内部 var name(不同于全局 name)得到 hoisted 到函数顶部。所以和

一样

var name = "prevName";
function printName(){
   var name; // name = undefined
   console.log(name);
   name = "newName";
}
printName();

在第二种情况下,您寻址全局变量。

JavaScript 中的变量(和函数声明)被提升,即它们的声明在编译时移动,直到它们范围的开始(它们所在的函数或模块)。 但是任务不会被提升。这就是第一个函数打印 undefined 的原因——局部变量替换了外部变量,但在调用日志之前它是未定义的。