预编译中RHS和LHS的概念和区别

LHSRHS

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相对应。(表达不严谨,只是为了方便初期记忆)

LHSRHS的小练习

 

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

LHSRHS的区别

为什么区分LHS引用和RHS引用这么重要呢?是因为在变量还没有被声明的情况下(在任何作用域中都找不到该变量时),这两种查询的行为是不一样的。

  • 对于RHS引用,当它在当前嵌套的所有作用域中都找不到该变量时,引擎就会抛出ReferenceError的异常。

  • 当引擎执行LHS查询时,如果在全局作用域中都没有查找到该变量,那么引擎就会要求全局作用域创建一个新的变量,并让作用域将这个变量返还给自己。前提是程序运行在非“严格模式”下。“严格模式”下,不成功的LHS引用也会抛出ReferenceError异常。

如果RHS找到了该变量,但打算对这个变量的值进行不合理的操作(比如试图给一个非函数类型的值进行函数调用,或者引用null或undifined类型的值中的属性),那么引擎或抛出另一种类型的异常,叫做TypeError

ReferenceError 同作用域判别失败相关,而 TypeError 则代表作用域判别成功了,但是对结果的操作是非法或不合理的。

预编译中RHS和LHS的概念和区别LHS 和 RHS LHS(Left-hand Side)引用和RHS(Right-h - 掘金

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值