预解析:也叫变量提升(函数提升)
会把所有的var 和function 提到当前(最近)作用域的最前面
函数提升优先级高于变量提升(即先把函数提升上去再把var提升上去)
案例:
f1();
console.log(c)
console.log(b)
console.log(a)
function f1(){
var a = b = c = 9;//相当于var a=9;
b=9//全局变量
c=9//全局变量 不同于 var a=9,b=9,c=9
console.log(a)
console.log(b)
console.log(c)
}
预解析后:
function f1(){
var a=9;
b=9 //没有var直接赋值,是全局变量
c=9 //没有var直接赋值,是全局变量
console.log(a)
console.log(b)
console.log(c)
}
f1();
console.log(c)
console.log(b)
console.log(a)
输出 99999 报错a is not defind