LHS 與 RHS
LHS 與 RHS 我們可以稱它們為兩種對於變數的查詢操作,以以下變數賦值為例
在編譯此行時,編譯器會先在當前的作用域先宣告一個變數,然後在執行時引擎會在作用域中查詢是否有該變數,有的話就會賦值,此種查詢行爲就稱為 LHS 查詢。
接著若我們想要在宣告一個變數 name 賦予 ming 這個變數的值時,ming 本身要經過 RHS 引用(查詢)來向右取值 (小明),接著進行 LHS 查詢向左賦值到 name 上。
另外,若我們使用 console.log(name) 來取得 name 值時,也是通過 RHS引用向右取值,且.log 在呼叫時也是通過 RHS查詢有無 log 這個函數。
錯誤發生在什麼時候
LHS 的錯誤會在編譯階段時便會發生,舉例來說
我們故意少打一個單引號,便會在編譯階段發生錯誤(SyntaxError)。
而 RHS 錯誤會在執行階段才發生,舉例來說
我們沒有宣告 min 這個變數,直接呼叫 會出現無效引用(ReferenceError) 時的錯誤而非 SyntaxError。
簡單來說
我們可以這樣理解:
若是要賦值到左側的話,就是 LHS 查詢,若是要向右側取值,或是取得變數值的話,就是 RHS 引用。