JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisiting)。
console.log(a); //undefined
var a = 1;
function b() {
console.log(a)
}
b(); // 1
我们看一下上面代码的运行顺序
- 第一步:引擎将 var a = 1 拆解为 var a = undefined 和 a=1,并将 var a = undefined放到最顶端, a=1 还在原来的位置。
这样一来代码执行顺序就是这样的:
var a = undefined;
console.log(a); //undefined
a = 1;
function b(){
console.log(a)
}
b(); //1
- 第二步:就是执行,因此js引擎一行一行从上往下执行就造成了当前的结果,这就叫变量提升。