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 有删减和修改。便于自己阅读和理解。