LHS?RHS?

157 阅读1分钟

LHS 和 RHS 的含义是 “赋值操作的左侧或右侧”,不仅仅是=,所有赋值操作都会有查询过程。

LHS:“找变量的容器”,查找的目的是对变量进行赋值。

RHS:“找变量的值的源头”,目的是获取变量的值。

function foo(a) { var b = a; return a + b; } var c = foo( 2 );

找出执行过程进行的查询:

  1. c= , 给c赋值 ,是LHS
  2. 找foo , 走的是 RHS
  3. 找a变量 是形参 走LHS ,将2赋值给a
  4. 给b赋值 ,LHS
  5. 找a的值 走RHS,赋值给b
  6. 找 a 的值 ,RHS
  7. 找 b的值,RHS
  • JavaScript引擎在代码执行之前会先进行编译,在这个过程中,var a = 2 这样的声明会被分解成两个独立的步骤:声明 和 赋值 ,相当于 var a; a = 2;//给a赋值时会进行LHS查询
  • LHS 和 RHS 查询都会在当前执行作用域中开始,如果没找到就向上级作用域中查找,没找到就再向上级找,最后抵达顶层(全局作用域)才会停止,到全局作用域查找后无论找到与否都将停止。
  • 没成功找到的 RHS 会抛出 ReferenceError 异常
  • 没成功找到的 LHS ,分两种情况:

严格模式:会抛出 ReferenceError 异常

非严格模式:自动隐式的创建一个全局变量,变量名就是用LHS查找的变量名