簡體   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