Может ли это быть хорошим использованием глобальных переменных? - PullRequest
0 голосов
/ 04 июля 2010

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

У меня есть веб-приложение AJAX, которое устанавливает несколько значений при входе пользователя - идентификатор пользователя, а также некоторую другую информацию. Эта информация не меняется в течение всего срока службы приложения.

У меня также есть кэш данных для минимизации поездок на сервер.

Могу ли я безопасно сделать все это глобальным? (информация только для чтения и кеш) Думаю, это упростит задачу, потому что тогда мне не придется беспокоиться о передаче значений между функциями, иногда неуклюжими способами.

По сути, это было бы как константы, значения которых не известны во время компиляции.

В некотором смысле сам DOM служит формой глобального состояния - я могу хранить значение в HTML, и оно будет доступно из любой точки программы.

Ответы [ 3 ]

0 голосов
/ 04 июля 2010

Вы можете создать пространство имен, таким образом, переменные будут похожи на глобальные, но вам не придется слишком беспокоиться о столкновениях и подобных вещах. Facebook делает это на некоторых своих API.

Чтобы быть в безопасности, вот пример безопасной реализации пространства имен:

if(!window.MY_NAMESPACE){
  MY_NAMESPACE = {
    a_variable : "some value",
    a_function: function(params){
      return a_variable;
    },
  };
}

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

0 голосов
/ 04 июля 2010

Я думаю, что вполне нормально использовать глобальное состояние для целей, которые вы упомянули. Просто убедитесь, что они записаны только один раз, то есть не изменены во время выполнения. Поэтому постарайтесь дать им имена, которые вы потом не будете случайно перезаписывать (что всегда опасно в Javascript - подделка var, и ваша переменная становится глобальной, то есть присоединяется к объекту window), и желательно поместить их все в та же структура, чтобы дополнительно минимизировать опасность конфликтов имен (меньше имен, меньше конфликтов).

Также имейте в виду, что переменные на самом деле не являются «глобальными»; если пользователь продолжает вход в систему, но открывает новое окно для вашего сайта, «глобальные» переменные исчезают. В этом случае вы должны убедиться, что несоответствия не будет, т. Е. Сервер предполагает, что при входе пользователя в систему переменные установлены.

0 голосов
/ 04 июля 2010

Нет ничего плохого в использовании глобалов, если вы знаете, что делаете. Постарайтесь сохранить его в чистоте, обернув все ваши «константы» в один глобальный объект. Основная проблема с глобальными именами заключается в том, что вы привязаны к единственному экземпляру любого состояния вашего глобального хранилища, что может или не может быть проблемой в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...