javascript之词法分析

来源:互联网 发布:寻找淘宝客 编辑:程序博客网 时间:2024/05/17 19:59

JavaScript执行顺序是自上而下的这是毋庸置疑的,在javascript执行之前还要进行词法分析,所以javascript整个运行过程包括两个部分,即词法分析过程和执行过程。下面来梳理一下javascript的运行过程:

 在开始运行前会创建一个Active Object,下面简称AO。

0.创建AO {}。

1.

1.1分析形参,将所有的形参添加到AO上作为AO的属性,值为undefined。

1.2将方法传值赋给对应的形参。

2. 分析由var 声明的变量,将变量添加到AO上,注意此时只是添加变量,值还是undefined。

3.分析函数声明,将函数添加到AO上。

4.词法分析完毕,按顺序执行语句。

下面看几个例子:

eg1:

var str1 = 'global';function t1(){    console.log(str1);// undefined    console.log(str2);// 报错 str2 is not defined    var str2 = 'local';}t1();/*0.创建AO {}。1.    1.1分析形参,没有2.分析由var声明的变量,分析到str2,将str2添加到AO上AO{str2:undefined}。3.分析函数声明,没有。4.词法分析完毕,按顺序执行语句。*/

eg2:

function t1(a){    var a = 2;    alert(a);    function a(){        alert(a);        }    a();}t1(1);//结果 2, 报错 number is not defined/*0.创建AO {}。1.    1.1分析形参,有a,将a添加到AO上AO{a:undfined}.    1.2分析到实参,添加到AO上AO{a:1}.2.分析由var声明的变量,分析到a,AO中有a,AO{a:undfined}。3.分析函数声明,a函数添加到AO中,AO{a:function}4.词法分析完毕,按顺序执行语句。给a赋值2,于是就有了上面的结果。*/

eg3:

function t1(a){    alert(a);    function a(){        alert(a);        }    a();}t1(1);//结果 function,function/*0.创建AO {}。1.    1.1分析形参,有a,将a添加到AO上AO{a:undfined}.    1.2分析到实参,添加到AO上AO{a:1}.2.分析由var声明的变量,没有。3.分析函数声明,a函数添加到AO中,AO{a:function}4.词法分析完毕,按顺序执行语句。于是就有了上面的结果。*/

eg4:

function t1(a){    alert(a);    a = function (){        alert(a);        }    a();}t1(1);//结果 1,function/*0.创建AO {}。1.1.1分析形参,有a,将a添加到AO上AO{a:undfined}.    1.2分析到实参,添加到AO上AO{a:1}.2.分析由var声明的变量,没有。3.分析函数声明,没有4.词法分析完毕,按顺序执行语句。于是就有了上面的结果。注意:其中的函数表达式和函数声明的区别*/

如果存在多层函数嵌套,词法分析是从外到内分析的。



0 0
原创粉丝点击