LHS和RHS

4/5/2020 javascript

js的两种查询方式LHS和RHS

# 在js引擎中存在两种不同的查询方式

  • LHS(left hand side):left是指“=”的左侧,也就是赋值操作的左侧,意思是要给查询的变量赋值,比如要把1赋给啊,我们首先要查询a是否存在,这时候用的就是LHS查询。
  • RHS(right hand side):right是指“=”的左侧,也就是赋值操作的右侧,意思是获取变量的值,比如我们要打印a,我们首先要查找a是否存在,以便获取a的值,这时候用的就是RHS查询。
console.log(a);
1

其中对a的引用就是RHS引用,因为a并没有赋任何值,目的是取到a的值并打印出来。

a=2;
1

这里我们对a的引用就是一个LHS引用,因为实际上我们并不关心当前的值是什么,只是想要为=2赋值这个操作找到一个目标。

function foo(a){
    console.log(a); // 2
}
foo(2);
1
2
3
4

这是一个既有LHS又有RHS引用的例子。

这个例子中,执行函数foo的时候进行了RHS引用,而对foo函数进行调用时,隐藏了把2赋值给了a,也就是进行了LHS引用。

# 注:

  • LHS查询比较松散,如果查询不到,就会自己创建一个全局的,并不会抛出异常。
  • RHS查询查询就比较严格了,如果查询不到的话,就开始抛出异常,因为你要获取某个变量的指向的值,可以压根你根本找不到这个变量,已经超出了他的能力范围,所以只能抛出异常。