引擎在執行編譯器在編譯過程生成的**時,通過查詢賦值操作的左側和右側的變數,判斷是否宣告過。
lhs 是變數在賦值操作的左側,例如:
var a = 2
rhs 是變數在賦值操作右側,例如:
console.log(a);
或foo(2)
foo(2) 是指找到 foo() 的函式。
rhs 在作用域中找不到變數,引擎會丟擲referenceerror 錯誤。
rhs 在作用域中,找到變數,但是進行了不規範的操作,比如:不是函式卻執行了函式操作,比如在末尾加了個(),引用數值為 null 或 undefined 的屬性,則會返回 typeerror 錯誤
lhs 在作用域中找不到變數,在非嚴格模式下會建立乙個全域性變數。
作用域中LHS查詢和RHS查詢
lhs查詢 賦值操作左側的查詢,lhs查詢試圖找到變數的容器本身,從而對其賦值。rhs查詢 賦值操作右側的查詢,可以理解為 取到某某的值 舉例 function foo a foo 2 rhs查詢有 foo 查詢foo函式 函式內console物件的查詢 對a進行rhs查詢 lhs查詢 把2賦值給引...
js中RHS與LHS區別
為什麼區分rhs與lhs是一件重要的事情?因為在變數沒有宣告 在任何作用域都找不到該變數的情況下 這兩種查詢的行為是不一樣的.function foo a console.log a b return a b foo 2 第一次對b進行rhs查詢是找不到該變數的.也就是說這是乙個 未宣告 的變數.如...
rhs和rhsa檔案屬性的檔案刪除方法
最近在維護伺服器的時候,發現好多站點都被掛馬,於是用webshell來查詢木馬後門,shell是掃瞄除了所有的後門木馬,但是無法編輯和刪除,在資源管理器中也無法看到那些檔案,aux.asp,functlon.asp,footer.asp,defau1t.asp。但是這些檔案在editplus中卻可以...