javascript的LHS和RHS

编译器在编译的过程中生成了代码,引擎执行的时候,会通过查找变量a来判断他是否声明过。查找的过程由作用域协助。

LHS和RHS基本看名字就能知道,L是左,是右。变量出现在复制操作的左侧时进行LHS查询,而在右侧时进行RHS,更确切的说,RHS是代表非左侧。

LHS查询比较松散,如果查询不到就会在全局作用域创建一个具有该名称的变量,不会抛出异常(非严格模式下,在严格模式下找不到,会抛出ReferenceError异常)。但是RHS查询比较严格,如果查询不到,引擎就会抛出ReferenceError异常,其实一想就明白,你在右侧,本来就是为了给左侧赋值,如果你本身还找不到值,那肯定是有错的。

以下是《你所不知道的JAVASCRIPT》中的两个例子

1.

function foo(a){
    console.log(a);//console ②RHS    这里有个隐式的a=2②LHS

}
foo(2); // foo①RHS  这里有个隐式的a=2①LHS

2.

function foo(a){
    var b = a ; // b= ③LHS   =a ②RHS
    return a + b;  aRHS ④RHS
}
var c = foo(2);//c= ①LHS  这里有个隐式的a=2LHS  foo ①RHS


你可能感兴趣的:(javascript的LHS和RHS)