JS中RHS引用和LHS引用的区别

平时做前端开发的时候可能接触不到LHS和RHS这两个名词,但是它却是js中最基础的概念,表示两种变量的查找方式,在js代码中无处不在。我们来举个例子说明一下LHS和RHS。

var a = 1;  我们把这个表达式根据等号拆成两个部分,var a 和 = 1。这个里面var a进行的LHS查找,编译器遇到var a时,会询问作用域是否存在一个名为a的变量,如果有则忽略,如果没有则让作用域声明一个名为a的变量(就是声明一个容器,过一会用来存储数字1),等式右边进行的是RHS查找,也就是查找数字1本身的值(可以理解为数字1的物理地址),然后再将1赋给a。

我们再来看一个例子,console.log(a);这里的a进行的是LHS查找还是RHS查找呢?进行的是RHS查找,因为a没有赋予任何值,这里只需要找到a本来的值,并传递给log函数。而上面的a则是LHS查找,需要为 = 1找到一个赋值目标。

我们再来看一个复杂一点的例子:

function test(a) {
    console.log(a);
}
test(2);

这个例子里哪些是LHS引用哪些是RHS引用?

最后一行test是一个RHS引用,表示查找到test的值并把它给我,而(..)表示test需要被执行,所以这里test必须是一个Function,否则会报test is not a function的错误,然后我们再看函数中的console.log(a);这里a进行的是RHS查找,表示找到a的值并传递给log(..),其实这里的console也是进行的RHS查找,表示查找到console这个对象并检查对象中是否有一个log方法。

这里有一个容易被忽略的地方,就是传参时隐式的 a = 2,这里的a进行的是LHS查找,表示在作用域中查找一个名为a的变量,并且将2赋给它。

你可能感兴趣的:(javascript)