重新声明时 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 的原因——局部变量替换了外部变量,但在调用日志之前它是未定义的。
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 的原因——局部变量替换了外部变量,但在调用日志之前它是未定义的。