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

2022-09-05 05:03:12 字數 1505 閱讀 6304

模組是閉包應用中最強大的乙個。

function

coolmodule()

function

doanother()

return

}var foo =coolmodule();

foo.dosomething();

//cool

foo.doanother(); //

1!2!3

這個模式在 j**ascript 中被成為模組。首先,coolmodule 只是乙個函式,必需通過呼叫它來建立乙個模組例項。如果不執行,內部作用域和閉包都無法建立。

其次,coolmodule 返回乙個用物件字面量預發來表示的物件。這個返回的物件中含有對內部函式的引用。保持內部資料變數是隱藏且私有的狀態。可以將這個物件型別的返回值看作本質上是模組的公共 api

模組模式需要具備兩個條件

1、必須有外部的封閉函式,該函式必須至少被呼叫一次(每次呼叫都會建立乙個新的模組)

2、封閉函式必須返回至少乙個內部函式,這樣內部函式才能在私有作用域形成閉包,並且可以訪問或者修改私有的狀態。

當只需要乙個例項是,可以改進成單例模式

var foo = (function

coolmodule()

function

doanother()

return

})();

foo.dosomething();

//cool

foo.doanother(); //

1!2!3

模組也是普通的函式,可以接受引數

function

coolmodule(id)

return

}var foo1 = coolmodule('foo 1');

var foo2 = coolmodule('foo 2');

foo1.identify();

foo2.identify();

模組模式另乙個簡單但強大的變化用法是,命名將要作為公共 api 返回的物件

var foo = (function

coolmodule(id)

function

identify1()

function

identify2()

var publicapi =

return

publicapi

})('foo module')

foo.identify();

//foo module

foo.change();

foo.identify();

//foo module

通過模組例項的內部保留對公共 api 物件對內部因喲肱,可以從內部對模組例項進行修改,包括新增,刪除方法和屬性,以及修改它們的值

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

第一節 作用域 根據名稱查詢變數的一套規則 referenceerror與作用域判別失敗有關,而typeerror則表示作用域判別成功了,但是對結果的操作是不合法的 var a 2 會被分解成兩個步驟 1.在其作用域生成新變數 若沒有 2.lhs查詢對其賦值 不成功的rhs會丟擲referencee...

你不知道的 和

開發中,編寫有一定逼格的 是每個程式猿都追求的。經常用來判斷的符號 和 也經常用來定義變數哦,你知道嗎?邏輯與 在有乙個運算元不是布林值的情況下,就不一定返回布林值。比如以下情況 1 第乙個運算元是物件,返回第二個數 var myinfo console.log myinfo 2 輸出22 第二個運...

你知道的和不知道的sass

關於sass,大多數人的認識乙個寫css的工具而已 其實就是的 但是這個工具的威力你發揮了多少呢。以下全部都是乾貨,希望你能用在自己的專案裡 定義集合 我們通常是這麼定義變數的 warning color ffa200 success color 62ad47 danger color ea4335...