javascript中的LHS和RHS

var a = b; 

该例子就是对a进行LHS引用,对b进行RHS引用。

L代表左,R代表右。变量出现在赋值操作的左边是进行LHS查询,出现在右边就是进行RHS查询。

例:

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

这个例子中有3个LHS和4个RHS。

1.     var c = foo(2)    c在赋值操作的左边,所以对c进行LHS引用。 foo(2)在赋值操作的右边,所以对其进行RHS引用。

2.     c是被赋值,所以我们需要知道foo(2)是多少,foo(2)的意思是,把2这个值赋值给foo函数中的变量a,所以a在赋值操作的左边,对a进行LHS引用。

3.    var b = a;  b在赋值操作的左边,所以对b进行LHS引用。 a在赋值操作的右边,所以对其进行RHS引用。

4.    return a+b      得到的是一个a+b的值,所以a+b在赋值操作的右边,a和b都是RHS引用。

 

区分LHS和RHS的原因:

在变量没有声明的情况下,这两种查询行为是不一样的。

function foo(a){
       console.log(a+b);
       b=a;
}
foo(2);

以上代码对b进行RHS的时候无法找到该变量的值,则会抛出ReferenceError异常,如果是LHS找不到变量,非严格模式下,会在全局作用域中,创建一个具有该名称的变量,严格模式下,会抛出与RHS类似的异常。

 

function init(a){
    b=a+3;
}
init(2);    
alert(b);//5

以上代码中,对b进行LHS引用,没有找到该变量,在全局作用域中创建一个同名的变量b,在函数init外可以访问到它。

 

 

 

 

 

 

 

 

------------------------------------------------------------------------

转自:https://www.cnblogs.com/yangxiaoguai132/p/5064625.html  有删减和修改。便于自己阅读和理解。

 

posted @ 2020-10-24 17:22  一梦梦  阅读(251)  评论(0编辑  收藏  举报