预解析:提前解析代码
就是在解析代码之前把变量、函数的声明提前(赋值不会提前)——提前到当前所在作用域的最上面。
1 function f1(){ 2 console.log("abc"); 3 } 4 f1();//输出mmm 5 function f1(){ 6 console.log("mmm"); 7 } 8 f1();//输出mmm
1 f1();//输出undefined 2 function f1(){ 3 console.log(num); 4 var num=10; 5 } 6 f1();//输出undefined
预解析相当于
把上述代码改为
f1();//输出undefined function f1(){ var num; console.log(num); num=10; } f1();//输出undefined
1 f2();//undefined 2 var mm=20; 3 f2();//20 4 function f2(){ 5 console.log(mm); 6 var nn=10; 7 }
预解析小案例
var f1; f1(); //这里是不能调用的,因为那是一个表达式,不会提前预解析 f1=funuction(){ console.log(a); var a=10; };