预解析: js引擎运行js里面所有的var 还有function提升到当前作用域的最前面
代码执行:按照代码书写的顺序从上往下执行
变量提升:把所有的变量声明提升到当前作用域最前面,不提升赋值操作
函数提升:把所有的函数声明提升到当前作用域的最前面,不调用函数
f1();
console.log(c);//9
console.log(b);//9
console.log(a);//报错 因为a是局部变量
function f1() {
var a = (b = c = 9);
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
/* 经过声明提升后
function f1() {
var a;
a=9;
b=9;
c=9;
var a = b = c = 9;
//相当于var a=9 b=9 c=9因为在函数中,
变量为声明则为全局变量,所有b c为全局变量
console.log(a);
console.log(b);
console.log(c);
}
}
f1();
console.log(c);
console.log(b);
console.log(a);
*/