预解析分为:
1.变量预解析:变量提升,不提升赋值操作
2.函数预解析:函数提升,不调用函数
案例1
var a = 18;
f1();
function f1() {
var b = 9;
console.log(a);
console.log(b);
var a = 13;
}
相当于执行了以下代码:
var a;
function f1() {
var b;
var a;
b = 9;
console.log(a); //undefined
console.log(b); //9
a = 13;
}
a = 18;
f1();
案例2 (经典面试题)
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
相当于执行了以下代码:
function f1() {
var a; //a 局部变量
a = b = c = 9;
//相当于 var a = 9; b = 9; c = 9; b和c直接赋值,没有var声明,所以是全局变量
//所以就是 var a = 9,b = 9,c = 9;
console.log(a); //9
console.log(b); //9
console.log(c); //9
}
f1();
console.log(c); //9
console.log(b); //9
console.log(a); //报错 a is not defined