javascript中的LHS与RHS
来源:互联网 发布:浙江林业干部网络学堂 编辑:程序博客网 时间:2024/06/01 10:44
最近在学习《你不知道的JS》,接触了LHS与RHS的概念,方便以后进行理解。
LHS与RHS:javascript引擎的两种查找类型,含义是赋值操作的左侧与右侧。
LHS:对哪个赋值就对哪个进行LHS引用,可以理解为赋值操作的目标。
RHS:需要获取哪个变量的值,就对哪个变量的值进行RHS引用,理解为赋值操作的源头。
赋值操作有多种形式,对于以上的两种对LHS与RHS的解释,我刚刚接触,还是很混乱。
我的理解就是,一般在左边的需要被赋值,就是LHS引用,右边需要寻找到他的值,就是RHS引用。
书中的例子:
function foo(a){ var b = a; rerurn a+b; } var c = foo(2);
这里有3次LHS引用和4 次RHS引用
1.var c 这里c需要被赋值,在赋值操作的左侧,所以对c进行LHS引用
2.变量c需要被赋值,他的值是foo(2),那么foo(2)的值是多少呢,需要查找foo(2)的值,在赋值操作的右侧,所以对foo(2)进行RHS引用
3.隐含赋值操作,将2传递给function foo(a){……}函数的参数a,a在赋值操作的左侧,对a进行LHS引用
4.var b=a;中,b需要被赋值,处在赋值操作的左侧,所以b进行的LHS,b的值将从a来,那么右侧的a的值从何而来呢?这就需要对赋值操作右侧的a进行RHS。
5.return a+b;中,需要找到a与b的值的来源,a与b都在赋值操作的右侧,才能得到a+b的值,所以对a与b都是进行RHS引用
为什么要区分LHS与RHS?
因为在变量还没有声明(在任何作用域中都无法找到该变量)情况下,这两种查询行为是不一样的。
1 function foo(a){2 console.log(a+b);3 b=a;4 }5 foo(2)
以上代码对b进行RHS的时候无法找到该变量的值,则会抛出ReferenceError异常,如果是LHS找不到变量,非严格模式下,会在全局作用域中,创建一个具有该名称的变量,严格模式下,会抛出与RHS类似的异常。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript"> function init(a){ b=a+3; } init(2); alert(b);//5 </script></head><body> </body></html>以上代码中,对b进行LHS没有找到该变量,在全局作用域中创建了一个同名的变量b,在函数init外部可以访问到b变量。
如果将代码更改为如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script type="text/javascript"> 7 function init(a){ 8 var b=a+3; 9 10 }11 init(2); 12 alert(b);13 </script>14 </head>15 <body>16 17 </body>18 </html>在function中定义了一个局部变量b,全局作用域中定义,控制台报错如图显示,窗口中没有任何输出
将代码改成如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript"> function init(a){ var b=a+3; } init(2); alert(window.b);//undefined </script></head><body> </body></html>
将代码改成如上所示,控制台并没有报错, 因为window.b作为window的一个属性访问,所以会返回undefined,而b作为一个变量没有定义的时候是会报错的
- javascript中的LHS与RHS
- javascript之LHS与RHS
- JavaScript基础--RHS与LHS
- JavaScript中的LHS查询和RHS查询
- javascript的LHS和RHS
- 你不知道的javaScript【笔记】--- LHS与RHS
- LHS、RHS
- 作用域之LHS与RHS查询
- JavaScript 引擎的LHS查询和RHS查询
- JS引擎之LHS RHS查询
- js的两种查询方式 LHS and RHS
- list的排序Comparator的compare(T lhs, T rhs)
- operator*(lhs:Quaternion,rhs:Quaternion)和operator*(rotation:Quaternion, point:Vector3)使用解析
- 深入学习js之浅谈作用域(RHS和LHS)
- rhs缩写
- JavaScript中的逻辑与
- javascript 中的&& 与||
- javascript中的&&与||
- 解决C#界面假死问题
- Ubuntu中使用java命令时,显示该命令一包含在下列软件包中
- acl访问权限控制
- 如何设置google浏览器和火狐浏览器不保存缓存
- 读书笔记15 《好好学习》成甲
- javascript中的LHS与RHS
- 448. Find All Numbers Disappeared in an Array
- 基于7系列FPGA的DCI技术的应用
- Python 闭包及陷阱
- ai切片的完美解决方案
- 一步步学习电子维修汇总贴
- 你不知道的 Android WebView 使用漏洞
- 【敏捷开发每日一贴】:丰田生产系统TPS
- GCC的常识