1.全局预处理阶段 :
1.1:处理函数声明有冲突 会覆盖
1.2:处理变量声明时有冲突,会忽略
这两句话下面的列题做了解释
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
//预处理阶段
alert(fn); //这里拿到的是第二个函数
alert(a); //a是undefined
alert(b); //b会直接报错
b=6;
function fn() {
console.log(1);
}
var fn=function(){}
function fn() {
console.log(2);
}
var a=function(){//不管这个a怎么声明都会是undefined
console.log(3);
}
var a=1;
//执行阶段
alert(a);// 1
alert(b);// 6
//总结:先扫描函数声明后扫描变量(var声明)
</script>
</body>
</html>
2.函数阶段
<script type="text/javascript">
function fn(a,b,a){
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
//alert(arguments[0]) <-> a = 1;//建立引用
//alert(arguments[1]) <-> b = 2;
//alert(arguments[2]) <-> a = 3;有一次建立引用会把第一次a的引用重定向
//alert(arguments[2]) <-> a = function(){}覆盖了;
function a(){
console.log(i);
}
}
fn(1,2,3);
</script>