编译:(1)词法分析-----字符串->代码块(词法单元)。即调用有状态的解析规则;(2)语法分析--------数组->抽象语法树AST(由元素逐级嵌套);(3)代码生成----AST->可执行代码
javascript引擎查询变量方法:(1)LHS查询------查询变量容器本身(赋值操作目标)(2)RHS查询-----查询变量值(谁是赋值操作的源头)
异常:(1)无法查询到该变量:RHS一定抛出ReferenceError异常。LHS在非严格模式下会帮忙创建一个变量,严格模式下也会抛出异常。(2)查询到变量做了不合理操作:抛出TypeError异常。
function foo(a){
var b=a;
return a+b;
}
var c=foo(2);
//所有的LHS查询(这里有三处)
//c=..; a=2(隐式变量分配) b=...
///所有的RHS查询(这里有四处)
//foo(2....) =a; a.... ...b
javascript引擎发展历程
1.遍历语法树
2.字节码
3.Direct Threading执行每一条指令直接跳到下一条要执
行的指令地址
4.JIT(即时编译)
作用域:
用于确定在何处以及如何查找变量(标识符)。如果查找的目
的时对变量进行赋值,进行LHS查询,如果目的是获取变量的
值,进行RHS查询