1.编译(简单了解)
程序中一段源代码在执行前会经历三个步骤,统称为编译。
分词/词法分析
将由字符组成的字符串分解成有意义的代码块(词法单元)。
例如-var =2;该语句会被分解成以下词法单元。
var,a,=,2;.
注意:空格是否会被当作词法单元取决于空格在这门语言当中是否具有意义。
解析/语法分析
语法分析的过程就是将词法单元转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树。(抽象语法树AST)
代码生成
将AST转化为可执行代码的过程被称为代码生成。
2.LHS查询
当变量出现在赋值操作的左侧时,进行LHS查询
找到容器本身,从而对其进行赋值
3.RHS查询
当变量出现在赋值操作的右侧时,进行RHS查询
简单的查找某个变量的值(得到某某的值)
4.练习
练习1
function foo(a){
console.log(a)
}
foo(2)
LHS有
- function函数,LHS查询
- a=2,声明形参,LHS查询
RHS有
- console.log(…):对console对象进行RHS查询,并检查得到的值中是否有一个叫做log的方法。
- a:RHS查找a的值并传给log()
- foo(…):foo(…)函数的调用
练习2
function foo(a){
var b=a;
return a+b;
}
var c=foo(2);
1.找出其中所有的LHS查询(4处)
- 声明foo函数
- 声明b
- 声明c
- 隐式声明形参a
2.找出其中所有的RHS查询(4处)
- 找到a的变量给b赋值
- foo函数调用
- 返回值中查找a
- 返回值中查找b