通俗易懂的LHS和RHS

在一段代码执行之前,会经过编译阶段 。
在对程序的处理过程中,不可或缺的人物就是:引擎,编译器,作用域。
JavaScript在预编译后执行代码时,引擎就会对其进行查询,查询分为:
LHS:Left-Hand-Side
RHS:Right-Hand-Side
即赋值的左侧和右侧:当出现在赋值操作的左侧时进行LHS查询,出现在右侧时进行RHS查询。
例:

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

在上述例子中,
像Kyle Simpson前辈一样,我们可以将自己当作引擎然后去和作用域进行对话,然后就会发现:有3处LHS查询,
分别是a=2 c=… b=…
有4处RHS查询
分别是:
foo(2… =a a… …b
RHS查询就相当于简单地查找某个变量的值
LHS查询是试图找到变量的容器本身,从而可以对其进行赋值。
因此在此例中:
c的赋值操作需要对c进行一次LHS查询,而对于foo(2)来说,需要进行一次RHS查询,去获取值.foo是一个函数,foo(a){},这里有一个隐式赋值操作,需要对a进行一次LHS查询,判断作用域中是否存在名为a的变量,若存在则直接赋值a=2;
不存在,(1)如果是严格模式下,则报ReferenceError:a is not defined.
(2)如果非严格模式,则创建一个a的全局变量,并直接赋值a=2;
在函数这个作用域内,var b = a;对b进行一次LHS查询,对a进行一次RHS查询
最终return a + b;需要分别对a和b进行RHS查询。

当一个函数嵌套在另一个函数中,即作用域的嵌套。则:在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,直到找到该变量或到达最外层的作用域为止。
例:

function foo(c){
console.log(c+d);
}
var d=2;
foo(2);

观察上述例子,我们发现在函数内部无法对d进行RHS引用,则向外继续查找,则在全局作用域中完成。

如何区分RHS和LHS
(1)若RHS查询在所有嵌套的作用域中找不到所需的变量,则引擎就会抛出ReferenceError异常
(2)若是执行LHS查询,若在全局作用域中也没有找到所需变量,则:1.程序运行在非严格模式下:全局作用域会创建一个具有该名称的变量,然后将其返回给引擎
2.程序运行在严格模式下:禁止自动或隐式地创建全局变量,因此引擎会抛出ReferenceError异常。

注:若查找的目的是对变量进行赋值,则使用LHS查询
若查找的目的是获取变量的值,则使用RHS查询。

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C是指一个变量或对象的左值(LHS)和右值(RHS)。引用中提到,只要LHS / RHS值对ostream友好,则将对其进行打印。这意味着如果C是一个类型,它可以被正确地打印到输出流中。引用中提到,当C作为左值时,将调用拷贝构造函数;当C作为右值时,将调用移动构造函数。这说明C可以作为左值或右值进行操作。引用中提到,在C++11中,类与五个特殊函数密切相关,它们是析构函数、拷贝构造函数、移动构造函数、拷贝赋值运算符和移动赋值运算符。这意味着C可以具有这些特殊函数来管理其生命周期和赋值操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [assume:假设是一个更聪明的断言替换(C ++ 03)](https://download.csdn.net/download/weixin_42127835/18470127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [1.5 C++细节五大函数:析构函数,拷贝构造,移动构造,拷贝赋值,移动赋值](https://blog.csdn.net/wyzeya/article/details/121293393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值