JavaScript的RHS引用和LHS引用

JavaScript的RHS引用和LHS引用

  • RHS是我要找到名为某某的变量,我要知道它的值是什么。
  • LHS是我要找到名为某某的变量,将值赋值给它,我不需要知道这个变量之前的值是什么

我们看着段代码

var b = 2;
console.log(b);

给变量查找变量b并给其赋值,就是LHS引用;获取b的值就是RHS引用

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

这段代码看起来很简单,但里面的引用却较为复杂。

首先,"去找foo的值,并把它给我",于是找到了foo,它是个函数,去执行它,这里要注意,函数有参数a,这里会执行一个LHS引用,把2赋值给a,这经常被忽略掉,然后别忘了,console.log也要进行引用,对console对象进行RHS引用,并检查里面是否有一个叫作log的方法,然后就是对a进行RHS引用,获取a的值,接下来还有最后一步,就像foo(2)一样,log(a),将a传递进去,引擎实现这个log的方法,理论上也会进行一次LHS的引用。

最后不管是LHS查询或RHS查询都会在当前的作用域找,找不到,再父级作用域找,直到全局作用域,如果还找不到那就会报错。

一道小试题

请问这段代码有几处RHS引用和LHS引用

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

好了,这两个知道还是没啥用处,它一种偏冷的知识,不过知道了,有种13格比较高的感觉。