在执行代码前,js解释器会先进行预解析,把变量声明和函数声明提升到当前作用域的最前面
下面通过两个案例来理解JS预解析过程
案例一
var num=10;
fun();
function fun(){
console.log(num);
var num=20;
console.log(num);
}
//相当于
/* var num;
function fun() {
var num;
console.log(num); //undefined
num = 20;
console.log(num); //20
}
fun(); */
案例二
fun2();
console.log(c);
console.log(b);
console.log(a);
function fun2() {
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}
//相当于
b;
c;
function fun2(){
var a;
a=9;
b=9;
c=9;
console.log(a);
console.log(b);
console.log(c);
}
fun2();
console.log(c);
console.log(b);
console.log(a); //a未定义
====================================================================================================================================================================================================================================================================================================