JavaScript词法分析过程
来源:互联网 发布:兴业证券软件优理宝 编辑:程序博客网 时间:2024/06/07 10:25
在调用一个JavaScript方法之前,都会对方法进行一次词法分析的过程,主要分析如下内容:
第一步: 先分析参数
第二布: 再分析变量声明
第三步: 最后分析函数声明
现提供一个具体例子代码,并解析分析步骤:
function t(age){var e = 2;var age = 10;function age() {}}t(2);
具体步骤:
1、 函数在运行前的瞬间,会生成一个活动对象(Active Object),简称AO。
2、分析函数的参数,并将其作为AO的属性,默认值全部为underfined,如:
AO{age=underfined}。
3、分析函数接受到的参数,并将参数内容设置到对象的AO属性上,如:
AO{age=2}
4、分析函数内部的变量声明,如var age,如果AO上还没有age属性,则添加AO属性,值是undefined;如果AO上已经有age属性则不做任何影响。如:
AO{age=2, e=undefined}
5、分析函数声明,并将函数赋给成AO的属性。
AO{age= function(){}, e=undefined}
注意:由于age属性已经存在,则被覆盖掉了。
根据以上步骤再来分析一个比较复杂的函数:
function a(b){alert(b);function b() {alert(b);}b();}a(1);
1、分析函数的参数,结果为:AO{b=undefined}
2、分析函数的接受到的参数,结果为:AO{b=1}
3、分析函数内部的变量声明,这里没有声明内部变量。
4、分析函数声明,结果为:AO{b=function(){alert(b)}}
词法分析完成之后将根据这个AO对象来运行,此时2个alert(b)都将会打印b函数。
根据这个词法的分析过程,可以清楚的明白JavaScript的运行原理,对这种奇葩的结果就自然而然的明白了。
注意点:
1、在词法分析过程中,分析函数声明的时候如果遇到如下情况需要注意。
function a(b){alert(b);b = function() {alert(b);}b();}a(1);这里的b= function(){} 并不是函数声明,而是函数表达式的赋值,在词法分析阶段不会使b=function(){},而是在运行阶段赋值。
因此这里的结果跟上面就不一样了,大家可以自行查看。
- JavaScript词法分析过程
- js-----词法分析过程
- javascript之词法分析
- javascript词法分析
- javascript--词法分析
- javaScript词法分析
- 也谈javascript词法分析
- 再谈javascript的词法分析
- 词法分析器的工作过程分析
- JAVASCRIPT作用域链,词法分析
- 2、JavaScript高级之词法分析
- javascript词法分析自己的个人理解。
- 实例分析 JavaScript 词法作用域
- 简述 JavaScript 作用域与词法分析
- 词法分析
- 词法分析
- 词法分析
- 词法分析
- mac 常用shell命令
- 解析响应式图片
- 双目相机的一个例子
- PICO CTF 2013 PHP 2: 85
- poj1083
- JavaScript词法分析过程
- Apache Spark 1.5新特性介绍
- OC08_字典Dictionary
- mac常用shell命令
- AsyncTask详解 并实现实例-模拟下载
- 进程间通信之共享内存-SystemV shmxxx详解(IPC范例篇)
- 学习使用Mark Man、Axure
- java job 资源
- ReThought (一): 如何构建理想的开发团队