JavaScript LHS和RHS查找

时间:2016-04-03 09:39:20

标签: javascript lookup

我正在阅读范围和关闭你不知道Kyle Simpson的JS书,特别是这个主题 Compiler Speak

他们提到了 LHS和RHS查询。我无法理解这两个术语,任何人都可以帮助我实现它们吗?

6 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:4)

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

我非常喜欢Kyle Simpson的方法,但这个特别简单的解释让我明白了这一点。

总是在&#34之间进行交易;告诉我需要知道什么,仅此而已#34;深入了解,深入了解。

有时,深刻理解可以帮助您避免麻烦,如何调试,编写测试代码,优化和重构。

我目前正在阅读和观看很多凯尔的写作和在线教学,他确实有擅长解释事情。很多教练都是因为过快而失去了人,因为他们有专业知识,而且他们很难放慢速度 - 另一方面,如果你太基本,谈话变得无趣,而你只是调出来。

答案 2 :(得分:3)

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();

答案 3 :(得分:2)

不要将其视为左手侧或右手侧分配,将其视为将值存储在内存中并稍后检索它。

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

相比之下,当您在chrome开发人员控制台中键入b = 2时,它会启动LHS查找,如果在嵌套范围中找不到b,则JS编译器会在全局范围内声明它(取决于是否在strict mode中运行代码。

例如,考虑以下代码



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

foo( 2 );




当JS编译器执行代码时,它首先查找函数foo以及它是否在当前范围(Hosting Environment Here)中声明,这称为RHS查找。现在在foo的范围内,参数将为2,当我们在编写foo(a)时声明函数foo( 2 )时,我们隐式地将值2赋值给a或{{1 },这被称为a = 2查找(将值LHS分配给2),现在快进编译器将再次排到a行,它将查找值{ {1}}和console.log( a + b)(再次a查找)如果找到值,则会将其分配给b参数(如果您认为RHS定义为{ {1}}在托管环境中console.log(再次console.log查找)。

在检索变量console.log(arg1)的值时进行排序,这意味着从arg1 = value of a+b的内存位置获取值,进行LHS sa console.log(b)查找正在将值赋给变量b,这意味着在范围中查找RHS的值,如果找到,则在b = 2的内存位置设置值b 。如果找不到,请查看上一级范围,2查找。

答案 4 :(得分:2)

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

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

LHS :将值(2)传递给foo方法时,编译器会将参数指定为 a = 2 ,称为LHS查找。它只会找到一个容器变量来赋值。

RHS :为了执行console.log打印 a ,需要一个RHS参考值来表示a的值。它被称为RHS Lookup

另一个例子

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. b =
  4. 上述代码段中的4个RHS

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

      编辑:

答案 5 :(得分:0)

或更短:

RHS-用于读取查找

LHS-用于写查找