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