javaScript编译原理及作用域

本文介绍了JavaScript作为一门编译型语言的特性及其编译执行流程。包括分词/词法分析、解析/语法分析、代码生成等阶段,并探讨了JavaScript引擎如何确保代码执行的最佳性能。

    javaScript是一门编译型语言。


    传统编译语言流程分为:分词/词法分析;解析语法分析;代码生成。

        分词/词法分析:将字符串代码分解为有意义的代码块。这些代码块被称为词法单元。

        解析/语法分析:将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树(抽象语法树)。

        代码生成:将抽象语法树转换为可执行的代码的过程称为代码生成。

    

    javaScript引擎:(负责整个javaScript的编译及执行)

        编译不在构建之前,而在代码执行前的几微秒(甚至更短)的时间里,javaScript使用这种方式来保证性能最佳。

    编译器:

        负责词法分析及代码生成。

    作用域:

       收集并维护所有声明的标识符(变量),确定当前执行的代码对这些标识符的访问权限。

例:var num  = 2

    1.编译器询问作用域是否已存在变量num在当前作用域内,如果有则忽略声明,继续编译,如果没有,则作用域在当前作用域集合中声明一个变量num;

    2.编译器为引擎生成运行所需代码。引擎询问当前作用域是否存在变量num,如果有则赋值,如果没有则继续寻找。如果最总找到了则会赋值,如若最终没有生成,则抛出异常。

总结:变量的赋值操作会执行两个操作,首先会在当前作用域中声明变量(如果之前没有声明过的话)。然后引擎在当前作用域中查找该变量,并赋值。

左查询/右查询:

    左查询:赋值操作的目标是谁(赋值)。      右查询:谁是赋值操作的源头(取值)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值