你不知道的JS(作用域和閉包)

2022-05-17 17:28:38 字數 474 閱讀 6803

第一節:作用域:根據名稱查詢變數的一套規則

referenceerror與作用域判別失敗有關,而typeerror則表示作用域判別成功了,但是對結果的操作是不合法的

var a=2 會被分解成兩個步驟

1.在其作用域生成新變數(若沒有)

2.lhs查詢對其賦值

不成功的rhs會丟擲referenceerror,不成功的lhs會自動隱私建立乙個全域性變數(非嚴格模式下)

第二節:詞法作用域

eval和with(不推薦)

第三節:函式作用域與塊作用域

1.隱藏內部實現

2.第四節:提公升

1.函式提公升優先於變數

第五節:作用域閉包

兩個特徵:(1)為建立內部作用域而呼叫了乙個包裝函式(2)包裝函式返回值必須至少包含乙個對內部函式的引用,這樣就會建立涵蓋整個包裝函式內部作用域的閉包

**函式實際上就是使用閉包

閉包實現模組化

你不知道的JS系列 16 模組和閉包

模組是閉包應用中最強大的乙個。function coolmodule function doanother return var foo coolmodule foo.dosomething cool foo.doanother 1 2 3 這個模式在 j ascript 中被成為模組。首先,coo...

《你不知道的JS(上捲 )》 二 詞法作用域

作用域共有兩種主要的工作模型。普遍被採用的的是第一種,詞法作用域。另一種為動態作用域,被bash指令碼 perl中的一些模式所採用。第一章提到過編譯階段之一 詞法分析。詞法作用域就是定義在詞法階段的作用域,即詞法作用域由你在寫 時將變數和塊作用域寫在 來決定的,大部分情況下詞法分析器處理 時會保持作...

你不知道的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...