function a(){
var h = 1;
function b(){
alert(h);
}
b();
}
a();
提醒 1;
function a(){
var h = 1;
function b(){
if(false){
var h = h * 2;
}
alert(h);
}
b();
}
a();
警报未定义。为什么?
最佳答案
变量声明被移动到它们定义的范围的顶部并且不分配值,直到执行赋值行。所以,你的第二段代码可以理解为
function a() {
var h = 1;
function b() {
var h;
if (false) {
h = h * 2;
}
alert(h);
}
b();
}
a();
即使您在 if
子句中定义了 h
,由于 JavaScript 没有 block 作用域,变量声明实际上被移到了函数的顶部。由于 if
条件不满足,因此永远不会为 h
赋值。这就是它提醒 undefined
关于javascript - 如果在上层作用域中声明了变量,则在局部作用域中 undefined variable ,并且在未执行的语句中在局部作用域中声明了具有相同名称的 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828743/