我们的引擎运行js分为两步:预解析 代码执行
1.预解析:把js里面所有的var和function提升到当前作用域的最前面
1)变量提升:把所有的变量声明提升到当前作用域最前面 不提升赋值操作
2)函数提升:把所有的函数声明提升到当前作用域的最前面 不调用函数
2.代码执行:按照代码书写顺序从上往下执行
案例
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a=b=c=9;//var a=9;b=9;c=9;
console.log(a);
console.log(b);
console.log(c);
}
//上述代码相当于以下代码
// function f1() {
// var a
// a=b=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