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
- javascript之词法分析
- 2、JavaScript高级之词法分析
- javascript词法分析
- JavaScript词法分析过程
- javascript--词法分析
- javaScript词法分析
- JavaScript之词法
- 也谈javascript词法分析
- 再谈javascript的词法分析
- 编译原理 之 词法分析
- 编译原理之词法分析
- 编译原理之词法分析
- js笔记之词法分析
- 编译原理之词法分析
- 编译原理之词法分析
- 词法分析之动态字符串
- 编译器之词法分析c
- 编译原理之词法分析
- android之wifi开发
- Maven实战笔记
- XML、DTD、XSD、XSL、XSLT
- Sap NetWeaver CE7.1删除目录功能
- OCP-1Z0-051-题目解析-第24题
- javascript之词法分析
- 读书笔记----ARM Cortex-M3权威指南(第二章)
- 解决自定义文件上传处理与Spring MultipartResolver的冲突问题
- 贪心算法和动态规划(2)
- 黑马程序员D8 多线程
- 文件上传利器SWFUpload使用指南
- Oracle静默安装日志
- 组合数学
- Perl 安装 模块Net::SSH2 有些0day是ssh2