為什么區分RHS與LHS是一件重要的事情?
因為在變量沒有聲明(在任何作用域都找不到該變量的情況下),這兩種查詢的行為是不一樣的.
function foo (a) {
console.log(a + b);
return a + b;
}
foo(2);
第一次對b進行RHS查詢是找不到該變量的.也就是說這是一個"未聲明"的變量.
如果在rhs的所有嵌套的作用域查詢中都無法找到該變量,js引擎就會拋出一個ReferenceError異常. ReferenceError是一個重要的異常.
相較之下, 當引擎執行 LHS 查詢時, 如果在頂層( 全局作用域) 中也無法找到目標變量,
全局作用域中就會創建一個具有該名稱的變量, 並將其返還給引擎, 前提是程序運行在非 “ 嚴格模式” 下。
“ 不, 這個變量之前並不存在, 但是我很熱心地幫你創建了一個。”
來自 你不知道的js