编译语言源码执行之前三个步骤
- 分词/词法分析(拆分成词法单元)
- 解析/词法解析(逐级潜逃生成“抽象语法树”)
- 代码生成(将AST转化为机器指令用于执行)
JS编译发生在执行前的几微秒
JS角色
- 引擎
从头到尾负责整个 JavaScript 程序的编译及执行过程。
- 编译器
引擎的好朋友之一,负责语法分析及代码生成等脏活累活。
- 作用域
引擎的另一位好朋友,负责收集并维护由所有声明的标识符(变量)组成的一系列查 询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。
编译器查询
- LHS引用查询(赋值操作的目标是谁)
- RHS查询(谁是赋值操作的源头)
function foo(a) {
// RHS
console.log( a );
}
// foo(..)调用进行RHS引用,去找foo的值
foo( 2 );
// a = 2 隐式操作,进行了一次LHS查询
// 查找console时进行了RHS,将2赋值给a时进行LHS引用查询
网友评论