JS的预编译过程
//变量为什么前置访问undefined,而函数可以任何地方调用????
//js的预编译(写完代码-->浏览器编译执行这一整个过程)
js的预编译分为:1、预解析 2、代码逐行执行,遇到错误终止。
//第一步:js预解析(浏览器编译执行代码之前,写完之后)
//1.找var,function关键字,找到了var提前赋值undefined,如果找到了函数,提前将整个函数体给这个函数名。
//2.如果函数名和变量名出现重复,函数名覆盖变量名。
//3.函数的参数类似于变量,函数内部同样做预解析,支持预解析。
//4.if语句和for语句里面的变量和函数做预解析提前赋值undefined(特殊的)
//第二步:代码逐行执行,遇到错误终止。(函数声明直接跳过)
// alert(a);//function a(){alert('haha');}
// var a=1;
// alert(a);//1
// var a=2;
// alert(a);//2
// function a(){
// alert('hehe');
// }
// alert(a);//2
// function a(){
// alert('haha');
// }
// alert(a);//2
特殊:
// alert(fn);//underfined
// if(true){
// function fn(){
// alert(1);
// }
// }
// alert(fn);//function fn(){alert(1)}