var a = 1;
function foo() {
if (!a) {
var a = 2;
}
alert(a);
};
foo(); //2
解释器分析代码为:
var a;
a = 1;
function foo() {
var a;
if (!a) {
a = 2;
}
alert(a); // 此时的 a 并非函数体外的那个全局变量
}
a=2;
并不等价于
var a;
a=2;
为什么foo()函数里会有一个 var a;
?
变量声明提升(变量赋值并不会提升)
用var声明变量不管是在哪里都相当于在顶部(函数内有局部作用域所以在函数内var相当于在函数的第一行声明)
都等价于
js只有在函数内才有局部作用域
所以在函数内任何地方声明都是相当于在第一行声明
函数内是一个独立的作用域 函数内的变量会先在局部内找(函数内) 函数内没有才会继续向外找
关于作用域