学习笔记:
1、浏览器对JS的解析大致可以分为两个步骤:
1)预解析:找到 var 声明的变量和 function参数
1>var a = undefined;(第一次进行解析时所有声明的变量都赋值为未定义)
2>f1 = function f1(){ alert(1); }(第一次解析时所有函数都是函数块)
* 遇到重名的留靠后的一个,变量和函数重名留函数。
2)逐行解析代码:
1>表达式:修改预解析的值
2>如果遇到函数调用进行如下:
1>预解析
2>逐行解释代码
例子如下:
<script>
alert(a);
var a = 1;
alert(a);
function a (){ alert(2);}
alert(a);
var a=3;
alert(a);
function a(){ alert(4); }
alert(a);
</script>
分析:
1>预解析后:a = function a(){ alert(4); }
2>逐行解释代码:
弹出 function a(){ alert(4); }
a = 1;
弹出 1
因为function a(){ alert(2); }是函数声明,不是表达式
所以再弹出 1
a = 3;
因为function a(){ alert(4); }是函数声明,不是表达式
所以再弹出 3