什么是变量提升?
JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一步一步地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫变量提升
例1:
console.log(a);
var a=1;
上面的代码首先使用console.log()方法,在控制台显示变量a的值,因为a还没有声明和复赋值,但是并不会报错,因为变量提升了变成如下:
var a;
console.log(a); //undefined
a=1;
需要注意的一点:
变量提升只对var命令声明的变量有效,如果一个变量不是用var命令声明的,就不会发生变量提升
例2:
console.log(b);
b=1;
因为b没有用var声明,所以不会发生变量提升,所有console.log(b)的执行结果会显示b没有声明ReferenceError: b is not defined
例3:
var a=1;
console.log(a);
console.log(b);
var b=2;
console.log(c);
c=3;
上面代码会变成:
var a;
var b;
a=1;
console.log(a); //1
console.log(b); //undefined
b=2;
console.log(c); //报错
c=3;
因为变量提升,a,b是用var声明的变量,所以被提升到代码头部,值留在原地,c不是用var变量声明的,所以无法变量提升。