今天看到一个问题
onsole.log("a" in window);
if (!("a" in window)) {
var a = 1;
}
alert(a);
我以为输出答案为1 运行之后是unefine 查了之后只发现是自己对变量提升的 理解出了偏差
函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部。这个意思是,像下面的代码
function foo(){
if(a==1){
var x=1
}
}
等价于
function foo(){
var x;
if(a==1){
x=1;
}
}
1对于全局作用于范围的变量,var与不var是有区别的. 没有var的写法,其变量不会被提升。比如下面两个程序
alert(a);
var a=1
alert(a);
a=1;
eval中创建的局部变量是不会被提升的(它也没办法做到