JavaScript LHS and RHS Lookup
JavaScript LHS and RHS Lookup
我正在阅读Kyle Simpson的Scopes and Closure of You don't know JS一书,特别是这个主题 编译器说话.
在那里,他们提到了LHS和RHS查找。我无法理解这两个术语,谁能帮助我实现它们?
变量出现在赋值操作的左侧时,将执行 LHS 查找,当变量出现在赋值操作的右侧时,将执行 RHS 查找。
我认为如下:
LHS 查找是一个容器查找
RHS 查找是一种值查找
不要将其视为左侧或右侧赋值,将其视为将值存储到内存中并在以后检索。
例如,当您在 chrome 开发者控制台中键入 b
时,它会启动RHS
查找(检索 b
的值(,如果未找到该值,则会抛出ReferenceError
。
相反,当您在 chrome 开发者控制台中键入 b = 2
时,它会LHS
查找开始,如果在嵌套作用域中找不到 b,则 JS 编译器会在全局作用域中声明它(取决于您是否在strict mode
中运行代码(。
例如,考虑以下代码
function foo(a) {
console.log( a + b)
}
foo( 2 );
当JS编译器执行代码时,它首先查找函数foo
以及它是否在当前范围(此处为托管环境(中声明,这称为RHS查找。现在在foo的范围内,参数将是2,正如我们在编写foo( 2 )
时声明函数foo(a)
的那样,我们将值2
隐式分配给a
或a = 2
,这称为LHS
查找(将值2
分配给a
(,现在快进编译器将进入console.log( a + b)
行,它将再次查找值a
和b
(再次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:当你将一个值(2(传递给foo方法时,编译器将分配给参数作为a = 2 ,称为 LHS 查找。它只会找到一个容器变量来分配值。
RHS:为了执行控制台.log要打印a,需要一个RHS引用的值为a。它被称为 RHS 查找
另一个例子
function foo(a) {
var b = a;
return a + b;
}
var c = foo( 2 );
上面示例中的 3 个 LHS -**
- c =(容器盛放 foo 的返回方法( a = 2
- (将值 2 传递给方法时,编译器将分配 a = 2(
- b =
上述代码片段中的 4 个 RHS
- foo(2( - 需要 a 的引用才能获取值
- = a - 要得到 b 的值,需要 a 的引用 a
- - 要获取 a 的值,需要 a 的引用 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 查找是一种值查找
我非常喜欢凯尔·辛普森(Kyle Simpson(的方法,但这个特别的简短解释让我清楚地认识到了这一点。
在"只告诉我需要知道的,仅此而已"和向下钻取以更好地理解深层次之间总是存在权衡。
有时,这种深刻的理解可以帮助您避免麻烦,如何调试,编写测试代码,优化和重构。
我目前正在阅读和观看凯尔的很多写作和在线教学,他确实有很好地解释事情的诀窍。很多教练一路上会因为走得太快而失去人,因为他们有专业知识,他们很难放慢脚步——另一方面,如果你变得太基础,谈话就会变得无趣,你就会退出。
或短:
RHS - 用于读取查找
LHS - 用于写入查找
- $lookup后的聚合筛选器
- JavaScript LHS and RHS Lookup
- JavaScript JSON lookup?
- 可以'在Lookup中找不到消除第二种记录类型的解决方案
- Javascript中函数声明的形式是' function fx(){} '是LHS还是RHS查找
- $lookup搜索蒙戈德布
- sharepoint rest lookup value
- 如何使用这个.container.lookup("view:viewName")在十一月2
- 什么取代了组件.lookup方法
- 当我有多个元素时,multi-select Lookup onChange事件不会触发
- CRM 2011 LookUp QuickFind OnChange event
- Ember{{#with..controller=..}}给出了“;未捕获的类型错误:无法读取属性'lookup
- Node.js中的Google数据存储.lookup没有返回任何结果
- sharepoint Online/365 Jquery, Set Lookup Column Not working