變量查詢的兩種方式:LHS和RHS

解釋含義

var a,b
var a(LHS查詢a) = 1;
b(LHS查詢b) = a(RHS查詢a)

一、RHS查詢與簡單地查找某個變量的值別無二致,而LHS查詢則是試圖找到變量的容器自己,從而能夠對其賦值。從這個角度說,RHS並非真正意義上的「賦值操做的右側」,更準確地說是「非左側」函數

二、LHS和RHS的含義是「賦值操做的左側或右側」並不必定意味着就是「=賦值操做符的左側或右側」。賦值操做還有其餘幾種形式,所以在概念上最好將其理解爲「賦值操做的目標是誰(LHS)」以及「誰是賦值操做的源頭(RHS)」。code

注意點

一、LHS和RHS查詢都會在當前執行做用域中開始,若是有須要(也就是說它們沒有找到所需的標識符),就會向上級做用域繼續查找目標標識符,這樣每次上升一級做用域(一層樓),最後抵達全局做用域(頂層),不管找到或沒找到都將中止。不成功的RHS引用會致使拋出ReferenceError異常。不成功的LHS引用會致使自動隱式地建立一個全局變量(非嚴格模式下)對象

二、查找只會查找一級標識符,好比a、b和c。若是代碼中引用了foo.bar.baz,詞法做用域查找只會試圖查找foo標識符,找到這個變量後,對象屬性訪問規則會分別接管對bar和baz屬性的訪問。作用域

三、若是RHS查詢找到了一個變量,可是你嘗試對這個變量的值進行不合理的操做,好比試圖對一個非函數類型的值進行函數調用,或者引用null或undefined類型的值中的屬性,那麼引擎會拋出另一種類型的異常,叫做TypeError。容器

相關文章
相關標籤/搜索