js之词法分析
词法分析
词法分析:
- 先分析参数;
- 再分析变量声明;
- 分析函数声明;
一个函数能使用的局部变量,就从上面的3步分析而来
具体步骤:
1.函数运行前的一瞬间,生成 Active Object(活动对象);
2.分析形式参数
2.1 函数声明的参数,形成AO的属性,参数的值即属性的值;
2.2 接收实参,形成AO相应的属性值
3.分析变量声明,如 var xxx
1.如果AO上还没有 xxx 属性,则添加AO属性, 值是undefined
2.如果AO上己经有 xxx 属性,则不做任何影响
4.分析函数声明:如 function foo(){}
1.把函数赋值给 AO.foo 属性
2.如果此前 foo 属性已存在,则覆盖之前的
如果此前 foo 属性已存在,则覆盖之前的
示例1
function t(age) {
console.log(age);//(1)
var age = 99;
console.log(age);//(2)
function age() {
}
console.log(age);//(3)
}
t(5);
词法分析过程:
1.形成活动对象:AO={};
2.分析形式参数
2.1分析参数:AO ={age:undefined};
2.2接收参数:AO={age:5};
3.分析greet变量声明,AO已经有greet属性,因此不做任何影响;
4.分析greet函数声明,AO.greet = function() {} ,被覆盖成函数
执行过程:
(1) 的结果是: function age() {} //因为上述第4步
(2) 的结果是: 99 //age被重新赋值了
(3) 的结果是: 99 //age没有被重新赋值所以还是99
js之词法分析的更多相关文章
- 深入JavaScript:词法分析、连续赋值猜想
JavaScript:词法分析.连续赋值猜想 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5851642.html 深夜发文,先吐槽下博客园的编 ...
- 第十八篇 js高级知识---作用域链
一直有想法去写写js方面的东西,我个人是最喜欢js这门语言,喜欢的他的自由和强大,虽然作为脚本语言有很多限制的地方,但也不失为一个好的语言,尤其是在H5出现之后.下面开始说说js的方面的东西,由于自己 ...
- js作用域的相关知识
众所周知,在ES6之前,JavaScript是没有块级作用域的,如下图所示: 学过其他语言的同学肯定有点诧异,为什么会这样呢?因为js还是不同于其他语言的,在ES5中,只有全局作用域和函数作用域,并没 ...
- 8.21 js
2018-8-21 20:05:43 2018-8-21 20:56:30 明天再看!!!! 今天空闲多看了书 <百年孤独> <苏东坡传> 打印结果 shanghai js的 ...
- [Python自学] day-16 (JS、作用域、DOM、事件)
一.JS中的三种函数 1.普通函数 function func(){ console.log("Hello World"); } func() 2.匿名函数 setInterval ...
- babel的初步了解
前段时间开始研究ast,然后慢慢的顺便把babel都研究了,至于ast稍后的时间会写一篇介绍性博客专门介绍ast,本博客先介绍一下babel的基本知识点. 背景: 由于现在前端出现了很多非es5的语法 ...
- webpack的理解、总结
weabpck的基础应用 https://blog.zhangjd.me/2016/06/19/webpack-your-bags/ https://juejin.im/post/5cc26dfef2 ...
- 前端-js-长期维护
############### JS简介和JS引入 ################ <!DOCTYPE html> <html lang="en" ...
- js词法分析
JavaScript的高级知识---词法分析 词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 函数在运行的瞬间, ...
随机推荐
- HTML学习体会
HTML介绍 华丽的网页界面,都是由静态网页和一些动态效果,插入的视频,和flash等等,不得不说,静态网页的制作,是学习网页的必经之路,可见静态网页在学习网页的前端是十分重要.静态网页主要是通过ht ...
- Spring MVC学习笔记——POJO和DispatcherServlet
POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. 使用POJO名称是为了避免和EJB(Enter ...
- ubuntu亮度调节失效
ctrl+alt+T 打开终端 输入下面的指令 sudo touch /usr/share/X11/xorg.conf.d/20-intel.conf 2 再输入下面的指令: sudo gedit / ...
- JavaScript Engines
http://openaphid.github.io/blog/2013/01/17/part-i-how-to-choose-a-javascript-engine-for-ios-and-andr ...
- Euclidean Space
http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
- AgularJS中Unknown provider: $routeProvider解决方案
最近在学习AgularJS, 做到http://angularjs.cn/A00a这一步时发现没有办法执行路由功能, 后来翻看控制台日志,发现提示Unknown provider: $routePro ...
- Hmmer安装与使用
Hmmer的安装与使用 从功能基因研究的角度来讲,相关的搜索,比如从序列数据库中,找同源的序列,或者对一个对一个新的基因功能进行鉴定,使用hmmer比使用blast有着更高的灵敏度已经更高的搜索速 ...
- sqlserver下载
https://msdn.microsoft.com/zh-cn/sqlserver/default.aspx
- mysql的Replication机制
mysql的Replication机制 参考文档:http://www.doc88.com/p-186638485596.html Mysql的 Replication 是一个异步的复制过程. 从上图 ...
- 序列化模块之 pickle 和 json
用于序列化的两个模块: json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps ...