繁体   English   中英

JavaScript LHS 和 RHS 查找

[英]JavaScript LHS and RHS Lookup

我正在阅读 Kyle Simpson 所著的 Scopes and Closure of You don't know JS 一书,特别是这个话题Compiler Speak

在那里他们提到了LHS 和 RHS 查找 我无法理解这两个术语,谁能帮我实现它们?

当变量出现在赋值操作的左侧时进行 LHS 查找,当变量出现在赋值操作的右侧时进行 RHS 查找。

我认为它如下:
lhs 查找是一个容器查找
rhs 查找是一个值查找

不要将其视为左侧或右侧的赋值,而是将其视为将值存储到内存中并稍后检索。

例如,当您在 chrome 开发人员控制台中键入b时,它会启动RHS查找(检索b的值),如果未找到该值,则会抛出ReferenceError

相反,当您在 chrome 开发者控制台中键入b = 2时,它会启动LHS查找,如果在嵌套作用域中找不到 b,则 JS 编译器会在全局作用域中声明它(取决于您是在strict mode还是在strict mode运行代码)不是)。

例如考虑以下代码

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

当 JS 编译器执行代码时,它首先查找函数foo以及它是否在当前范围(此处为托管环境)中声明,这称为 RHS 查找。 现在在 foo 的范围内,参数将是 2 并且当我们在编写foo( 2 )时声明函数foo(a) foo( 2 )我们隐式地将值2分配给aa = 2 ,这称为LHS查找(分配值2a ),现在快进编译器将再次来到console.log( a + b) ,它将查找值ab (再次RHS查找),如果找到值,则将其分配给console.log参数(如果您假设在托管环境中console.log被定义为console.log(arg1)arg1 = value of a+b (这也是LHS查找)。

简而言之:

• 当引擎检索变量console.log(b)的值时,它从b的内存位置获取值。 这是一个RHS查找

• 当引擎将值赋给变量b = 2 ,它在作用域中查找b的值——如果找到,则在b的内存位置中设置值2 ,如果没有,则在上层作用域中查找. 这是LHS查找。

您提到的同一本书中的简单示例

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

LHS :当您将 value(2) 传递给 foo 方法时,编译器会将参数分配为a = 2 ,称为 LHS 查找。 它会简单地找到一个容器变量来分配值。

RHS :为了执行console.log 打印a ,需要a 值的RHS 引用。 它被称为 RHS 查找

另一个例子

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

上例中的 3 LHS -**

  1. c = (保存 foo 方法返回值的容器)
  2. a = 2 (当你将值 2 传递给方法时,编译器会分配 a = 2)
  3. 乙 =

4 来自上述代码片段的 RHS

  1. foo(2) - 需要 a 的引用来获取值
  2. = a - 要获取 b 的值,需要 a 的引用
  3. a - 要获取 a 的值,需要 a 的引用
  4. b - 要获取b的值,需要 b 的引用

编辑:

LHS - 查找标识符以用于分配目的或为其分配值。

let foo;

// It's looking for foo identifier in global scope and assign value
// So it's an LHS 
foo = 1; 

// It's also LHS as it assigning new value
foo = 2;

现在,RHS - 这意味着当你正在寻找一个标识符来使用它(而不是分配值)

function foo() {
    alert(2);
}

// this look for an identifier called foo and 
// in global scope it's a function decoration 
// and execute it
foo();

我认为它如下: lhs 查找是一个容器查找 rhs 查找是一个值查找

我非常喜欢凯尔辛普森的方法,但这个特别的简明解释让我明白了这一点。

“只说我需要知道的,仅此而已”和深入了解以在更深层次上更好地理解之间总是需要权衡取舍。

有时,这种深刻的理解可以帮助您摆脱麻烦,如何调试、编写测试代码、优化和重构。

我目前正在阅读和观看凯尔的大量写作和在线教学,他确实有很好的解释能力。 很多讲师在此过程中会失去一些人,要么因为他们有专业知识而走得太快,而且他们很难放慢脚步——另一方面,如果你太基础了,谈话就会变得无趣,你就会退出。

或简短:

RHS - 用于读取查找

LHS - 用于写查找

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM