2016-09-22 3 views
3

У меня есть пара переменных в моем приложении, которые я должен использовать в большинстве своих закрытий, например, переменные, содержащие предварительно загруженные запросы, или переменные, содержащие текущее состояние приложения (которые необходимо динамически изменять в разных места).Шаблон для глобальных переменных

Так моя структура приложения выглядит следующим образом:

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

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

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

    })(); 
})(); 

И я создаю эти переменные внутри MainModule, но хотите изменить их, удалить их и т.д., внутри Utils и Events. Я думал о двух способах:

  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 следует использовать только тогда, когда это необходимо, иначе это просто бессмысленная абстракция.

Смежные вопросы