结果是test just undifne local JS是边解析边执行的代码,但是有一点是特殊的,就是在代码加载之前会对属于同一个对象的变量和函数先定义,然后在顺序执行代码。 var str1 = "global"; function scopeTest2(){ alert(str1); var str1 = "local"; alert(str1); }
scopeTest2(); 这段代码等价于 var str1 = "global"; function scopeTest2(){ var str1 alert(str1); str1 = "local"; alert(str1); }
JS是边解析边执行的代码,但是有一点是特殊的,就是在代码加载之前会对属于同一个对象的变量和函数先定义,然后在顺序执行代码。
var str1 = "global";
function scopeTest2(){
alert(str1);
var str1 = "local";
alert(str1);
}
scopeTest2();
这段代码等价于
var str1 = "global";
function scopeTest2(){
var str1
alert(str1);
str1 = "local";
alert(str1);
}
scopeTest2();
对于scopeTest1 第一个alert的 str1 它不属于函数的变量还是属于windows的。所以执行结果就是
test,第二个alert只是对str1重新赋值而已,但是它仍然是外部变量对于scopeTest2,当代码执行到它的时候,就检索到属于它的函数或者变量有(这里是变量str1 ),所以它先制定对这个变量的定义,但是并未赋值,所以结果第一个alert就是undefine。第二个自然是local
是这样么