我學習JavaScript和模塊模式,但我在我的代碼犯了一個錯誤,它不對證明一些我雖然是真實的關於這個模式的概念。我的基本代碼是這樣的:的javascript模塊模式變量的作用域
(function(window,$){
//global menu object
var menu = (function(){
//menu tab component
var tab = (function(){
//public properties
var tab = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Tab")
}
//return public properties
return tab;
})();
//menu curtain component
var curtain = (function(){
//public properties
var curtain = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Curtain")
}
//return public properties
return curtain;
})();
//menu content component
var content = (function(){
//public properties
var content = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Content")
}
//return public properties
return content;
})();
//public properties
var menu = {
init:initialiseMenu
}
//private properties
function initialiseMenu(){
//initialise each component of the menu system
tab.init();
curtain.init();
content.init();
}
//final menu object
return menu;
})();
window.menu = menu;
})(window,jQuery);
然後當我的頁面加載和代碼被稱爲:
menu.init();
它給人的警報依次是:
initialising tab
initialising curtain
initialising content
如我所料。但是,如果我改變內容組件是這樣的:
//menu content component
var content = (function(){
//public properties
var content = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Content")
}
//CHECK ACCESS TO PREVIOUS VARIABLES
curtain.init();
//return public properties
return content;
})();
它給出了警報的順序:
initialising curtain
initialising tab
initialising curtain
initialising content
因此,我認爲,這是能夠訪問,即使它WASN帷幕變量作爲參數傳入模塊。 我認爲,每個模塊將自包含的,但我發現,這是不是這樣的,反正有做一個模塊只能訪問變量,你想它呢?特別是對我的例子會有所幫助, 謝謝丹。
這是ES6的發佈嗎? – 2016-06-17 13:50:10
是的,ES6是ES5的超集。有一些新的作用域結構像'let',但是這個代碼仍然有效 – 2016-06-17 14:31:17