执行结果:
为什么第一个不输出全局变量呢?
我们先了解下变量提升,指的是变量声明总是会被解释器“提升”到函数体的顶部,这意味着,我们的var scope="局部”,但解释器会提升该scope变量——将该变量的声明提升到函数体的顶部。
注意:变量提升只是提升变量声明部分,并不会提升变量赋值部分。
上面的代码可以转换为:
function test(){
var scope ;
document.writeln(scope+"<br/>");
scope = "局部";
document.writeln(scope+"<hr/>");
}
这样的话就在test()函数里面,先声明了scope变量,但是第一次打印时还没有赋值,故为undefined