LHS 和 RHS 的含义是 “赋值操作的左侧或右侧”,不仅仅是=,所有赋值操作都会有查询过程。
LHS:“找变量的容器”,查找的目的是对变量进行赋值。
RHS:“找变量的值的源头”,目的是获取变量的值。
function foo(a) { var b = a; return a + b; } var c = foo( 2 );
找出执行过程进行的查询:
- c= , 给c赋值 ,是LHS
- 找foo , 走的是 RHS
- 找a变量 是形参 走LHS ,将2赋值给a
- 给b赋值 ,LHS
- 找a的值 走RHS,赋值给b
- 找 a 的值 ,RHS
- 找 b的值,RHS
- JavaScript引擎在代码执行之前会先进行编译,在这个过程中,var a = 2 这样的声明会被分解成两个独立的步骤:声明 和 赋值 ,相当于 var a; a = 2;//给a赋值时会进行LHS查询
- LHS 和 RHS 查询都会在当前执行作用域中开始,如果没找到就向上级作用域中查找,没找到就再向上级找,最后抵达顶层(全局作用域)才会停止,到全局作用域查找后无论找到与否都将停止。
- 没成功找到的 RHS 会抛出 ReferenceError 异常
- 没成功找到的 LHS ,分两种情况:
严格模式:会抛出 ReferenceError 异常
非严格模式:自动隐式的创建一个全局变量,变量名就是用LHS查找的变量名