LHS
和 RHS
LHS(Left-hand Side
)引用和RHS(Right-hand Side
)引用。通常是指等号(赋值运算)的左右边的引用。 我们来看下面这句代码:
- 这里对a的引用是一个RHS引用,因为这里a并没有赋予任何值,我们只是想查找并取得a的值,然后将它打印出来。
arduino
代码解读
复制代码
console.log(a); 复制代码
- 这里对
a
的引用是一个LHS
引用,因为我们并不关心当前的值是什么,只是想要为赋值操作找到目标。
ini
代码解读
复制代码
a = 2;
简而言之,在这里将RHS理解为取值,LHS理解为找对象。 在这里,也会发现RHS与getter非常类似,LHS与setter相对应。(表达不严谨,只是为了方便初期记忆)
LHS
与RHS
的小练习
css
代码解读
复制代码
function foo(a){ // 2. LHS找a的位置,给a赋值2 var b = a; // 3. RHS找a的值 4. LHS找b的位置,给b赋a的值2 return a + b; // 5. RHS找a的值 6. RHS找b的值 } var c = foo(2) // 1. RHS找foo的值 7. LHS找c的位置,给c赋值foo(2)的值4
LHS
与RHS
的区别
为什么区分LHS引用和RHS引用这么重要呢?是因为在变量还没有被声明的情况下(在任何作用域中都找不到该变量时),这两种查询的行为是不一样的。
-
对于RHS引用,当它在当前嵌套的所有作用域中都找不到该变量时,引擎就会抛出ReferenceError的异常。
-
当引擎执行LHS查询时,如果在全局作用域中都没有查找到该变量,那么引擎就会要求全局作用域创建一个新的变量,并让作用域将这个变量返还给自己。前提是程序运行在非“严格模式”下。“严格模式”下,不成功的LHS引用也会抛出ReferenceError异常。
如果RHS找到了该变量,但打算对这个变量的值进行不合理的操作(比如试图给一个非函数类型的值进行函数调用,或者引用null或undifined类型的值中的属性),那么引擎或抛出另一种类型的异常,叫做TypeError。
ReferenceError 同作用域判别失败相关,而 TypeError 则代表作用域判别成功了,但是对结果的操作是非法或不合理的。
预编译中RHS和LHS的概念和区别LHS 和 RHS LHS(Left-hand Side)引用和RHS(Right-h - 掘金