私はJavaScriptとモジュールのパターンを学んでいますが、私のコードで間違いを犯しました。私の基本的なコードは次のようである:次にjavascript module pattern変数の範囲
(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がリリースされた現在のものですか? –
はい、ES6はES5のスーパーセットです。 'let'のような新しいスコープ構造がいくつかありますが、このコードはまだ有効です –