这里是编译原理相关的知识,代码的编译的过程一般分为
- 分词 和 词法分析
- 一行代码被分解(一般是空格)成多个单词
- 这些单词一般就叫做词法单元,就是所谓的分词
- 词法分析是按照特定规则生成一堆词法单元(分词)的过程
- 在js中可以理解为,用空格分隔开的所有字符都是分词
- 所以词法作用域,就是针对某个分词的,来描述这个分词在那个作用域中有效
- 这个分词,多数情况指得就是 变量
- 某个变量,在某些作用域中有访问权限,就成这个变量属于这个作用域
- 全局作用域
- 函数作用域
- 块作用域
- 语法分析
- 这个很好理解,我们在写代码时,没按照规则写,那么就是语法有问题
- 就像我们学习英文语法,把单词(JS 中叫做 分词)排列组合形成一个句子,分析句子的含义,就是语法分析
- 代码中,语法分析就是根据特定规则将分词转化成一个有结构的抽象语法树(AST)
- AST 本质是一个js对象
- vue源码中,关于模版引擎的解析,也会包含生成AST这一步,因为模版语法也是一种代码嘛,肯定要被解析成一个js对象然后再实现功能
- 代码生成
- 根据 语法分析生成的 AST生成各平台可执行的代码(机器码)
- 代码生成设计了系统资源分配等知识