今天遇到了这么一个问题
var a=10;
function fun(){
console.log(a);//undefined
var a=20;
console.log(a);//20
}
fun();
有人会有这样的疑惑,为什么第一个输出的是undefined而不是10呢
这又要谈到作用域了。
函数在执行时,会先在自己的函数体里查询变量,如果没有,才会一级一级往上查找。函数fun()在执行时,输出第一个变量a是undefined是因为它现在自己的执行环境里查询到变量a已声明,即变量提升(即变量可以提前声明但是赋值是不可以的),此时就输出了undefined。
以上函数的原型实际是这样的:
function fun(){
var a;
console.log(a);//undefined
a=20;
console.log(a);//20
}
fun();
这样就很容易理解了。