js 作用域中查找变量RHS LHS

RHS 查询与简单地查找某个变量的值别无二致,而 LHS 查询则是试图 找到变量的容器本身,从而可以对其赋值。

console.log( a );

其中对 a 的引用是一个 RHS 引用,因为这里 a 并没有赋予任何值。相应地,需要查找并取得 a 的值,这样才能将值传递给 console.log(…)。相比之下,例如:

a = 2;

这里对 a 的引用则是 LHS 引用,因为实际上我们并不关心当前的值是什么,只是想要为 = 2 这个赋值操作找到一个目标。

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

最后一行 foo(…) 函数的调用需要对 foo 进行 RHS 引用,意味着“去找到 foo 的值,并把它给我”。并且 (…) 意味着 foo 的值需要被执行,因此它最好真的是一个函数类型的值!
这里还有一个容易被忽略却非常重要的细节。
代码中隐式的 a=2 操作可能很容易被你忽略掉。这个操作发生在 2 被当作参数传递给foo(…) 函数时,2 会被分配给参数 a。为了给参数 a(隐式地)分配值,需要进行一次LHS 查询。这里还有对 a 进行的 RHS 引用,并且将得到的值传给了 console.log(…)。console.log(…) 本身也需要一个引用才能执行,因此会对 console 对象进行 RHS 查询,并且检查得到的值中是否有一个叫作 log 的方法。
最后,在概念上可以理解为在 LHS 和 RHS 之间通过对值 2 进行交互来将其传递进 log(…)(通过变量 a 的 RHS 查询)。假设在 log(…) 函数的原生实现中它可以接受参数,在将 2 赋值给其中第一个(也许叫作 arg1)参数之前,这个参数需要进行 LHS 引用查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值