第一阶段
js预解析
“找一些东西”:var, function ,参数
a=... ;所有的变量,在正式运行代码之前,都会提前赋一个值:未定义
fn1=function fn1(){...};所有函数,在运行之前都是整个函数快
遇到重名:只留一个
如果变量和函数重名,只留变量
遇到两个函数重名,留下后者
第二阶段
逐行解读代码:
表达式:含有这些运算符的能改变变量的值( =、 +、 - 、*、 / 、% 、++、 -- 、!、 参数、....)
案例:
<script type="text/javascript">
alert(a); //function a(){alert(4);}
var a=1;
alert(a); //1
function a(){alert(2);};
alert(a); //1
var a=3;
alert(a); //3
function a(){alert(4);};
alert(a); //3
a(); //Uncaught TypeError: a is not a function
</script>