预解析也叫做变量、函数提升。 变量提升: 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。
console.log(num); // 结果是多少?
var num = 10; // undefined
函数预解析(函数提升)
函数提升: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。
预解析案例:
var num = 10;
fun();
function fun() {
console.log(num);
var num = 20;
}
相当于:
f2();
console.log(c);
console.log(b);
console.log(a);
function f2() {
var a = b = c = 9;
// 相当于 var a=9 ; b=9;c=9; b和c直接赋值 没有var 声明 当全局变量看
// 集体声明 var a =9 ,b=9,c=9这样才是达到这种 var b =9 效果
console.log(a);
console.log(b);
console.log(c);
}
// 案例输出:9 9 9 9 9 报错
另外一个案例:
案例4:
f2();
console.log(c);
console.log(b);
console.log(a);
function f2() {
var a = b = c = 9;
// 相当于 var a=9 ; b=9;c=9; b和c直接赋值 没有var 声明 当全局变量看
// 集体声明 var a =9 ,b=9,c=9这样才是达到这种 var b =9 效果
console.log(a);
console.log(b);
console.log(c);
}
// 案例输出:9 9 9 9 9 报错