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();
提醒未定义。为什么?
答案 0 :(得分:5)
变量声明被移动到它们定义的作用域的顶部,并且未分配值,直到执行赋值行。因此,您的第二个代码可以理解为
function a() {
var h = 1;
function b() {
var h;
if (false) {
h = h * 2;
}
alert(h);
}
b();
}
a();
即使您在h
子句中定义了if
,由于JavaScript没有块作用域,因此变量声明实际上已移到函数的顶部。由于不满足if
条件,因此h
永远不会赋值。这就是它警告undefined
答案 1 :(得分:4)
功能范围内的变量在整个功能范围内。 var
在一个区块内并不重要。所以这个:
function b(){
if(false){
var h = h * 2;
}
alert(h);
}
等同于:
function b(){
var h;
if(false){
h = h * 2;
}
alert(h);
}
周围的函数也有一个名为h
的变量并不重要。
答案 2 :(得分:-1)
你要重新宣布' h'使用' var。'删除' var。'的第二个实例像这样:
function a(){
var h = 1;
function b(){
if(false){
h = h * 2;
}
alert(h);
}
b();
}
a();