var a = 2;
最表层的理解, 声明了一个 a 变量 赋值 2;
深层一点的Js,他在中间做的动作;
引擎
引擎负责从头到尾的整个JS程序编译和执行过程。
编译器
负责语法分析和代码生成等。
作用域
收集维护所有的变量,认作,给变量的一个家,一个区域。
var a = 2;
声明的执行过程
1、编译器在编译时,2、引擎在运行时
在 var = a 时,编译器询问作用域,这个a是否存在,如果有,编译器则忽略这个声明,否则会在作用域产生一个新的变量,并命名为a
编译器会生成引擎运行时所需要的代码,在运行的时候引擎在当前作用域查找一个叫做a的变量,如果有就会赋值执行,如果没有,引擎就会继续查找,找不到就会抛出异常。
深入
编译器在第二步‘生成了代码’引擎执行时,会通过查找变量来判断是否已经声明。
引擎对变量的执行查找,称为LHS查找,另一个查找的类型叫做RHS。
赋值操作的 L 左 R 右(实际,称为叫,非左侧)
举例
a = 2;
这是一个LHS引用,因为这个操作的目的,并不是想知道关心当前的值是什么,只是想 为 = 2这个赋值找到一个目标
(赋值操作的目标是谁)
console.log(a)
这是一个RHS引用,因为a并没有赋予任何值。需要查找并获取a的值,才能将值 传送给consolo.log(?);
(谁是赋值操作的源头)
如果查找的目的是对
变量进行赋值,那么就会使用 LHS 查询;如果目的是获取变量的值,就会使用 RHS 查询。