什么是LHS和RHS查询
【书名】:你不知道的JavaScript(上卷)
【作者】:Kyle Simpson
【本书总页码】:213
【已读页码】:25
在JS中引擎从头到尾负责整个 JavaScript 程序的编译及执行过程、编译器负责语法分析及代码生成等、作用域负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。
变量的赋值会执行两个动作,首先编译器在作用域内声明该变量,运行时引擎在作用域帮助下查找该变量然后赋值。
当变量位于赋值操作符左侧时进行LHS查找,反之则进行RHS查找。LHS查找是对目标的引用,即要被赋值的目标是谁;RHS是对赋值操作源值的查找。
以上函数有3处LHS查询和4处RHS查询。
以引擎和作用域的聊天展现:
引擎:嗨,老哥,我要对 c 进行 LHS 引用。你见过它吗?(1处LHS)
作用域:稍等。嗯,找到了,接好。
引擎:谢谢啊,再帮我找下 foo,我要对它进行RHS引用。(1处RHS)
作用域:好的,这家伙是个函数,给你。
引擎:我还需要为 a 进行 LHS 引用,这个你见过吗?(2处LHS)
作用域:这个也见过,编译器最近把它声名为 foo 的一个形式参数了,拿去吧。
引擎:好的,我把2给它了。(2处RHS)
引擎:老哥,我又来了。我现在要对 b 进行 LHS 引用。你见过它吗?(3处LHS)
作用域:在这边,给你。
引擎:老哥,比心。我现在要确定下 a 的 RHS 引用。(3处RHS)
作用域:嗯,它还在老地方。
引擎:老哥,你太棒了。再帮我确定下 b 的 RHS 引用。(4处RHS)
作用域:OK。它也在呢,拿走吧!
引擎:老哥,辛苦了!我的戏演完了,走了啊。
作用域:等等我啊,我没有加戏。一起去唱K啊!