我学习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