Javascript 词法分析
发布日期:2021-08-14 18:04:31 浏览次数:5 分类:技术文章

本文共 1563 字,大约阅读时间需要 5 分钟。

Javascript 词法分析

词法分析
分析3样东西
第一步:先分析参数
第二步:再分析变量声明
第三部:分析函数声明
一个函数能适用的全局变量,就从上面的3步分析而来
具体步骤:
0:函数运行前的一瞬间,生成Aactive Object (活动对象),叫AO
1:
1.1 函数声明的参数,形成AO的属性,值全是undefined
1.2 接收实参,形成AO相应的属性的值
2:分析变量声明!如var age,
如果AO上还没有age属性,则添加A0属性,值是undefined
如果AO上已经有age属性,则不做任何影响
3:分析函数声明,如function foo(){},
则把函数赋给AO.foo属性
注:如果此前foo属性已存在,则被无情的覆盖了
 
实例一
function t(age) {    alert(age)}t(5) //5t() //undefined
词法分析过程:
AO {age:undefined}
运行过程:
t(5) ->AO.age=5;alert(AO.age);//5
t() ->AO.age没有得到赋值,还是undefined
 
实例二
function t2(age){    var age = 99;    alert(age)}t2();
分析过程
0:形成AO={}
1:
1.1 分析形参 AO = {age:undefined}
1.2 接收形参 AO = {age:5}
2:分析var age,发现AO已经有age属性,不做任何影响
执行过程
AO.age = 99;
alert(age)
 
 
实例三
function t3(greet){    var greet = 'hello';    alert(greet);    function greet(){}    alert(greet)}t3(null); //hello hello
词法分析过程:
0:AO = {}
1:
1.1 分析参数 AO = {greet:undefined}
1.2 分析参数 AO = {green:null}
2:分析green变量声明,A0已经有greet属性,因此不做任何影响
3:分析green函数声明,AO.greet = function(){},被覆盖成函数
执行过程:
green = 'hello'
alert(greet)
alet(greet)
 
实例四
function a(b){    alert(b);    b = function(){        alert(b)    }    b();}a(1);
词法分析过程
0:A0 = {}
1:分析形参 A0 = {b:undefined} -> {b:1}
2:分析var声明没有?没有
3:分析函数声明没有?没有
(注:b = function({}) ,是一个赋值过程,在执行期过程才有用)
执行过程:
alert(b);//1
b = function(){
alert(b);
}
b();//function
 
函数声明与赋值函数的区别
 
function t1(){}t2 = function(){}
这两种方式效果不同
t1是函数声明,虽然全局内也得到一个t1变量,值是function
t2只是一个赋值的过程,值是谁?值是右侧表达式的返回结果,即函数
就是说function (){}在js看来,就和3*2,6/3一样,是个表达式,返回一个结果
因此,t1 t2两种方式在词法分析时,有着本质区别
前者,在词法分析阶段,就发挥作用
而后者,在运行阶段,才发挥作用
 

转载于:https://www.cnblogs.com/yz-blog/p/11328064.html

转载地址:https://blog.csdn.net/weixin_30731305/article/details/101110095 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ConcurrentHashMap1.7和1.8对比
下一篇:实现一个EventEmitter类,这个类包含以下方法: on/ once/fire/off

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年11月22日 02时13分31秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java 音量_java – 音量为零? 2019-06-17
python绑定事件_Python tkinter之Bind(绑定事件)的使用示例 2019-06-17
scala map java map_scala中Map集合的简单使用 2019-06-17
java构造方法左右_java构造方法 2019-06-17
药店零售管理php系统,小型药店销售管理系统 2019-06-17
linux找pid调用网卡,Linux通过网络端口(或者PID)查找运行程序路径 2019-06-17
linux 网卡em1 eth0,配置bond网卡, em1, em2 和 eth0, eth1是什么区别? 2019-06-17
linux c语言 exit函数,C语言中exit();怎么用? 2019-06-17
linux scons源码安装,SCons 第一章 构建并安装SCons 2019-06-17
c语言 虚函数,C语言模拟虚函数表 2019-06-17
c语言排序算法冒泡,排序算法——冒泡算法(C语言版) 2019-06-17
华为p10android版本,终于来了:华为P10系列开启安卓8.0内测 2019-06-17
my android什么意思,是什么“';'预期“意思? 2019-06-17
android ui界面元素,Android的界面元素UI 2019-06-17
signature=9cf852a3b7f1aa11fbf981d46275fb63,Signature: _____________________ 10 May 2007 2019-06-17
五彩泡沫html5游戏,HTML5 Canvas 泡沫色彩变幻动画 2019-06-17
鸿蒙操作系统首次亮相,华为鸿蒙操作系统UI专利首次亮相 2019-06-17
华为鸿蒙新版即将揭开面纱,华为鸿蒙新版即将揭开面纱 2019-06-17
html显示单行文本框表单元素有哪些,常见的表单元素有哪些?各有什么属性?... 2019-06-17
聚类分析tensorflow实例_浅议聚类算法在TensorFlow平台中的应用前景 2019-06-17