var a = 0;
function test(){
alert(a);
if(false){
var a = 100;
}
}
test();
为什么alert(undefind);
而不是alert 0
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;
}
效果又会不一样
10 回答11.4k 阅读
4 回答3.3k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
4 回答2k 阅读✓ 已解决
js变量提升,等价于下面这样