LHS查詢:賦值操作左側的查詢,LHS查詢試圖找到變量的容器本身,,從而對其賦值。
RHS查詢:賦值操作右側的查詢,可以理解為“取到某某的值”
舉例:
function foo(a) {
console.log(a);
}
foo(2);
RHS查詢有:
- foo(..), 查詢foo函數
- 函數內Console對象的查詢
- 對a進行RHS查詢
LHS查詢:
- 把2賦值給參數a時,對a進行LHS查詢;
- 區別
如果RHS查詢在所有嵌套的作用域中找不到所需的變量,引擎就會拋出ReferenceError異常;
相比之下,非嚴格模式下,當執行LHS查詢時,如果在頂層作用域也無法找到目標變量,全局作用域會創建一個具有該名稱的變量,並將其返回給引擎;嚴格模式下,LHS查詢,找不到目標變量時也會拋出ReferenceError異常。
如果RHS查詢找到了一個變量,但是對這個變量的值進行不合理的操作(如試着引用null類型的屬性),引擎會拋出TypeError異常。
- 作用域
作用域是一套規則,用來管理引擎如何在當前作用
域以及嵌套的子作用域中根據標識符名稱進行變量查找。如果查找的目的是對
變量進行賦值,那么就會使用 LHS 查詢;如果目的是獲取變量的值,就會使用 RHS 查詢。