var a = 0;
function test(){
alert(a);
if(false){
var a = 100;
}
}
test();
为什么alert(undefind);
而不是alert 0
在es5中并不存在块级作用域,因而
alert(a);
if(false){
var a = 100;
}
即便没有进入if判断,但是 var a实际上与alert(a)实在同一个作用域。 在同一个作用域内通过var声明变量存在变量提升。
如果我么稍微改一下,
alert(a);
if(false){
let a = 100;
}
效果又会不一样
js变量提升,等价于下面这样
var a = 0;
function test(){
var a;
alert(a);
if(false){
a = 100;
}
}
test();
对,是变量提升的原因,另外,js查找变量是先查找当前作用域在查找父级作用域的,先查找到test里有a的声明,就停止查找了,所以就是undefined