LHS 与 RHS 查询

什么是 LHS 与 RHS 查询

最简单的理解可以概括如下:如果查找的目的是对变量进行赋值,那么就会使用 LHS 查询;如果目的是获取变量的值,就会使用 RHS 查询。

分析 var a = 2 是什么查询

var a = 2,很显然是将 2 赋值给变量 a,所以这是 LHS 查询

再分析下面几个列子

例一

  • 首先(a) 中的 a 我们要获取 a 这个变量的值,这时就需要执行 RHS 查询
  • 再者 console.log() 本身也需要一个引用才能执行,这时候我们还需要获取 console 的引用,所以要对 console 执行 RHS 查询。当我们查询到 console 的引用后,会检查得到的值中是否有一个叫做 log 的方法

这里不会再对 log 进行 RHS 查询。因为对 console 查询完毕后,对象属性访问规则会接管对 log 属性的访问。对象会接管其下面的属性的访问

例二

function foo(fnn) {
  console.log(fnn);
}

foo('girl');
  • 首先 foo(...) 我们需要找到它的引用,这时就需要执行 RHS 查询
  • 然后我们隐式的将 girl 这个值赋值给了函数参数中的 fnn 这个变量,这时就需要执行 LHS 查询
  • 最后对 console.log(fnn) 的分析就和例一一样,对 fnn 进行 RHS 查询,对 console.log 进行 RHS 查询

例三

function foo(fnn) {
  var wfly = fnn;
  return fnn + wfly;
}

var c = foo('girl');
  • 首先 var c = foo('girl') 中, foo(...) 我们需要找到它的引用,这时就需要执行 RHS 查询,然后将值赋值给 c,执行 LHS 查询
  • 然后我们隐式的将 girl 这个值赋值给了函数参数中的 fnn 这个变量,这时就需要执行 LHS 查询
  • 对 var wfly = fnn; 首先,获取 fnn 变量的值需要执行一次 RHS 查询,接着将 fnn 变量的值赋值给 wfly 变量,执行 LHS 查询
  • 最后 return fnn + wfly 需要对 fnn 执行 RHS 查询,同样的对 wfly 也要执行 RHS 查询

总结
所以共计执行了 4 次 RHS 查询,3 次 LHS 查询

当 LHS 与 RHS 遇到作用域嵌套

作用域嵌套

tip LHS 与 RHS 的差异以及出现异常的情况

LHS 与 RHS 的差异以及出现异常的情况


原文链接:https://wflynn.cn/pages/986e34

posted @ 2026-09-20 11:35  wflynn  阅读(6)  评论(0)    收藏  举报