LHS和RHS的含义是“赋值操作的左侧或右侧”并不一定意味着就是“=赋值操作符的左侧或右侧”。赋值操作还有其他几种形式,因此在概念上最好将其理解为“赋值操作的目标是谁(LHS)”以及“谁是赋值操作的源头(RHS)”。
如果RHS查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出ReferenceError异常。如果RHS查询到了一个变量,但是你尝试对这个变量的值进行不合理的操作,比如试图对一个非函数类型的值进行函数调用,或者引用null或undefined类型的值中的属性,那么引擎会抛出TypeError异常。
例:
function foo(a){
var b=a;
return a+b;
}
var c=foo(2);
1.找出所有的LHS查询(有三处)
c=…;、a=2(隐式变量分配)、b=…
2.找出所有的RHS查询(有四处)
foo(2…、=a、a…、…b