JS中RHS引用和LHS引用的區別

平時做前端開發的時候可能接觸不到LHS和RHS這兩個名詞,但是它卻是js中最基礎的概念,表示兩種變量的查找方式,在js代碼中無處不在。我們來舉個例子說明一下LHS和RHS。

var a = 1;  我們把這個表達式根據等號拆成兩個部分,var a 和 = 1。這個裏面var a進行的LHS查找,編譯器遇到var a時,會詢問作用域是否存在一個名爲a的變量,如果有則忽略,如果沒有則讓作用域聲明一個名爲a的變量(就是聲明一個容器,過一會用來存儲數字1),等式右邊進行的是RHS查找,也就是查找數字1本身的值(可以理解爲數字1的物理地址),然後再將1賦給a。

我們再來看一個例子,console.log(a);這裏的a進行的是LHS查找還是RHS查找呢?進行的是RHS查找,因爲a沒有賦予任何值,這裏只需要找到a本來的值,並傳遞給log函數。而上面的a則是LHS查找,需要爲 = 1找到一個賦值目標。

我們再來看一個複雜一點的例子:

function test(a) {
    console.log(a);
}
test(2);

這個例子裏哪些是LHS引用哪些是RHS引用?

最後一行test是一個RHS引用,表示查找到test的值並把它給我,而(..)表示test需要被執行,所以這裏test必須是一個Function,否則會報test is not a function的錯誤,然後我們再看函數中的console.log(a);這裏a進行的是RHS查找,表示找到a的值並傳遞給log(..),其實這裏的console也是進行的RHS查找,表示查找到console這個對象並檢查對象中是否有一個log方法。

這裏有一個容易被忽略的地方,就是傳參時隱式的 a = 2,這裏的a進行的是LHS查找,表示在作用域中查找一個名爲a的變量,並且將2賦給它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章