var
定义的变量会提升
if(!(a in window)){
var a = 1;
console.log('haha')
}
console.log(a);
以上代码只会输出undefined
,不会输出haha
,因为JavaScript
在解析时会首先将当前作用域中的 变量进行扫描,建立作用域链,变量的初始值都为undefined
,因此以上代码相当于:
var a = undefined;
if(!(a in window)){//所有这里为假
var a = 1;
console.log('haha')
}
console.log(a);
若将代码换成
let
和const
定义的变量不会提升
if(!(a in window)){
let a = 1;//或者换成const
console.log('haha')
}
console.log(a);
以上代码在执行到a in window
是就会报错,因为let
和const
定义的变量不会提升