2016-09-22 19 views
3

私は自分のアプリケーションで、プリロードされたリクエストを保持する変数やアプリケーションの現在の状態を保持する変数のような、私のクロージャの大部分で使用する必要がある変数をいくつか持っています場所)。グローバル変数のパターン

だから私のアプリケーション構造は次のようになります。

(function() { 
    var MainModule = (function() { 

    })(); 
    var Utils = (function() { 

    })(); 
    var Events = (function() { 

    })(); 
})(); 

そして私はUtilsEventsの内側など、それらを削除し、MainModule内のこれらの変数を作成し、それらを変更したいです。

  1. は、これらの変数の配列を保持Context閉鎖を作成し、get()set()アクセス方法を持っている:私は2つの方法について考えてきました。
  2. これらの変数を引数としてクロージャに渡しますが、それらの設定を解除することはできません。javascriptが配列/オブジェクトを関数に渡す方法のために難しいでしょう。

どうすればよいですか?

+3

これらのIIFEを使用しなくても問題が解消されると、通常のスコープが適用されます。 – adeneo

+0

'MainModule'、' Utils'と 'Events'には何がありますか?あなたは何かを過度に抽象化してクラスを作ろうとしているようです。 – Brad

+0

あなたは 'MainModule.exposedVariable'を持つことができます。それ以外のモジュールはすべてそれを見ることができます。 – Thilo

答えて

0
(function() { 
    var MainModule = (function() { 
     var mine; 
     return { 
     getMine: function(){ return mine; }, 
     setMine: function(a){ mine = a; } 
     } 

    })(); 
    var Utils = (function() { 
     return function(module){ 
     module.getMine(); 
     } 

    })(); 
    var Events = (function() { 

    })(); 
})(); 

IIFEは、MainModule変数に入れるものを与えていないので、他のものがUtils内で何かを呼び出すと仮定しています。 get/setはプライベート変数へのアクセスを与える最も安全な方法です。コメントのように、IIFEは必要なときにのみ使用する必要があります。それ以外の場合は、無意味な抽象化です。