在變數還沒有宣告, lhs,rhs 兩種查詢的行為是不一樣的
functionfoo(a)
foo(2);
第一次對 b 進行 rhs 查詢時是無法找打該變數對,如果 rhs 查詢在所有巢狀的作用域中遍尋不到所需的變數,引擎就會丟擲 referenceerror 異常
當引擎執行 lhs 查詢時,如果在全域性作用域中也無法找到目標變數,全域性作用域中就會建立乙個具有該名稱的變數
如果 rhs 查詢找到了乙個變數,但是嘗試對這個變數進行不合理對操作,比如試圖對乙個非函式型別對值進行函式呼叫,或者引用 null 或 undefined 型別對值中的屬性,那麼引擎會丟擲 typeerror 異常。
《你不知道的JS(上捲 )》 二 詞法作用域
作用域共有兩種主要的工作模型。普遍被採用的的是第一種,詞法作用域。另一種為動態作用域,被bash指令碼 perl中的一些模式所採用。第一章提到過編譯階段之一 詞法分析。詞法作用域就是定義在詞法階段的作用域,即詞法作用域由你在寫 時將變數和塊作用域寫在 來決定的,大部分情況下詞法分析器處理 時會保持作...
你不知道的JS(作用域和閉包)
第一節 作用域 根據名稱查詢變數的一套規則 referenceerror與作用域判別失敗有關,而typeerror則表示作用域判別成功了,但是對結果的操作是不合法的 var a 2 會被分解成兩個步驟 1.在其作用域生成新變數 若沒有 2.lhs查詢對其賦值 不成功的rhs會丟擲referencee...
你不知道的JavaScript 作用域(二)
詞法階段 詞法作用域是定義在詞法階段的作用域。欺騙詞法 欺騙詞法的兩個機制 1 eval function foo str,a var b 2 foo var b 3 1 結果是1,3function foo str foo var a 2 2 with var obj 單調乏味的重複 obj ob...