2016-09-22 156 views
3

我在我的應用程序中有幾個變量,我必須在大多數閉包中使用變量,例如保存預加載請求的變量或保存當前應用程序狀態的變量(需要在不同的時間動態更改地方)。全局變量的模式

所以我的應用程序的結構是這樣的:

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

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

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

    })(); 
})(); 

我裏面創建MainModule這些變量,但要改變它們,刪除它們,等等,裏面UtilsEvents。我一直在思考兩個方面:

  1. 創建Context關閉,保持這些變量的數組,並有get()set()訪問方法。
  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只能在需要的時候使用,否則這只是毫無意義的抽象。