浏览器解读代码时,会按照以下顺序进行加载
1 对var 声明的变量进行预处理,只声明不复制
2对于函数声明进行提升,并把函数的内容打印到函数名的后面
3最后对于参数进行处理
4之后浏览器按照代码加载顺序,逐行解析代码,遇到表达式再开始赋值,同时修改仓库里面的值。
demo1 var声明变量预处理,只声明不复制
var a=1;
function fn1(){
alert (a);
var a=2;
}
fn1(); //函数内声明的a在作用域上优于父级函数的声明,但是由于只声明 未赋值,因此弹出undefine;
alert(a); //1
demo2 对于函数声明进行提升,并把函数的内容打印到函数名的后面
alert(a);
var a=1;
alert(a);
function a(){
alert (2);
}
alert(a);
function a(){
alert(4)
}
alert(a);
输出 1)function a(){alert(4)} 2) 1 3) 1 4) 1
demo3