javascript运行机制

本文详细介绍了JavaScript代码的执行过程,包括读入代码段、词法分析、语法分析、变量及函数预解析等内容,并解释了不同块间变量共享的机制。

运行顺序

  1. 读入第一个代码段(js执行引擎并非一行一行地执行程序,而是一段一段地分析执行的)
  2. 做词法分析和语法分析,没错则解析成语法树,有错则报语法错误并跳转到步骤5
  3. 对var变量和function定义做预解析
  4. 执行代码段,有错则报错(比如变量未定义)
  5. 如果还有下一个代码段,则读入下一个代码段,重复步骤2
  6. 结束

注: javascript是按块执行, 但是不同块属于同一个全局作用域, 即块之间的变量和函数是可以共享的;

词法分析

  1. 词法文法

    • tokens: 文法终结符, 空白和注释之外的输入元素,如:ECMAScript语言的保留字,标识符,字面量,标点符号等

    • 行结束符虽然不被视为tokens,但会成为输入元素流的一部分,用于引导处理自动插入分号

    • 空白和单行注释会被简单的丢弃,不会出现在语法文法的输入元素的流中

    • 词法文法有两个目标符。InputElementDiv 目标符用在允许除法 (/) 或除赋值 (/=) 运算符开始的语法文法上下文中。InputElementRegExp 目标符用在其他语法文法上下文。

  2. 词法分析

    当一个字符流被解析为 ECMAScript 程序,它首先通过词法文法应用程序反复转换为一个输入元素流;然后再用一个语法文法应用程序解析这个输入元素流。当输入元素流没有更多 tokens 时,如果 tokens 不能解析为 Program 目标非终结符的单一实例,那么程序在语法上存在错误。

  3. 目标非终结符: TODO

语法分析

将词法分析阶段产生的记号, 生成语法树,如果无法生成,则报错;

  1. 符号表:记录变量、函数、类
  2. 语法树:程序结构的树形表示,将此树形结构生成中间代码

 

待续...

 

转载于:https://www.cnblogs.com/mininice/p/3876308.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值