透過函式的 closure 特性 : 封裝函式和變數
透過 IIFEs 特性 : 立刻呼叫
JavaScript 沒有 public、private概念 : 透過程式結構實踐
-> 透過 closure,將變數、函式限制於一個範圍,限制其存取、使用
好處:將函式、變數模組、私有化,避免混雜於全域中,也能隱藏實作。
Sample-1 by IIFEs
var testController = (function() {
var n = 23;
var add = function(x){
return n + x;
}
return {
publicTest: function(a) {
console.log(add(a))
}
}
})()
依據 IIFEs 特性,testController 在執行時會被立即呼叫
test at the console
input : budgetController.x
output : undefined
input : budgetController.add(5)
output : undefined
input : budgetController.publicTest(5)
output : 28
Sample-2 by multiple IIFEs
var testController = (function() {
var n = 23;
var add = function(x){
return n + x;
}
return {
publicTest: function(a) {
return add(a);
}
}
})()
var UIController = (function() {
// unused now
})()
var controller = (function(testCtrl, UICtrl){
var b = testCtrl.publicTest(5);
return {
secPublic: function() {
console.log(b);
}
}
})(testController, UIController)
將 publicTest() 原本的console.log 改為 return 值,透過 controller 跨函式進行存取
test at the console
input : controller.secPublic()
output : 28
b 來自於 testCtrl.publicTest(),透過 closure 概念,函式能存取的範圍包含其內含以及往外推,
controller.secPublic() -> controller(testCtrl, UICtrl) -> testController
課程 : https://www.udemy.com/course/the-complete-javascript-course/
來源 :
http://cythilya.blogspot.com/2015/06/javascript-module-pattern.html
https://ithelp.ithome.com.tw/articles/10215129