Javascript Глобальные переменные - PullRequest
3 голосов
/ 13 ноября 2010

Как мне создать переменную переменную как глобальную переменную?

так что-то вроде:

function globVar(variable){
   window.variable;
}

Таким образом, я мог бы также создавать глобальные переменные в автоматическом режиме, а также легче создавать их для себя:)

EDIT

Например, я мог бы создать глобальную переменную, например, так: globVar('myVariable');, затем myVariable добавляется к глобальным переменным.

Ответы [ 3 ]

10 голосов
/ 13 ноября 2010

Извините, что говорю это, но ответы, которые вы получили, являются вредными привычками, от которых вам следует держаться подальше. лучшая практика программирования и, возможно, правильная практика программирования будет заключаться в псевдо-именном пространстве ваших глобальных переменных, чтобы не загромождать глобальное пространство имен / область.Причина этого заключается в том, чтобы сделать ваш код более управляемым и, что более важно, облегчить вам жизнь, если / когда ваше приложение станет большим.Простым механизмом определения пространства имен является использование шаблона модуля, известного Дугласом Крокфордом.

Вот простой пример:

var myNamespace = function(){
  var o = {};
  var globals = {};

  var setGlobVar = function(name, value) {
    globals[name] = value;
  };

  var getGlobVar = function(name) {
    if (globals.hasOwnProperty(name)) {
      return globals[name];
    } else {
      // return null by default if the property does not exist 
      return null;
    }
  };

  o.setGlobVar = setGlobVar;
  o.getGlobVar = getGlobVar;
  return o;
}();

Чтобы использовать это, вы просто называете его как методы объекта.

myNamespace.setGlobVar("secret_msg", "Dumbledore dies, so does Hedwig");
myNamespace.getGlobVar("secret_msg");

Вы также можете выставить globals переменная вместо использования методов setGlobVar и getGlobVar для ее использования, если вы хотите упростить доступ к переменной.


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

Еще более простой подход к этому - просто определить объект и расширить его свойства.

var globals = {};
globals.SECRET_MSG = "Snape is not a traitor"

Хотя я бы расширил этот подход, поместив globals в пространство имен, которое является специфическимк моему приложению.

var myNamespace = {};
myNamespace.globals = {};
myNamespace.globals.SECRET_MSG = "Snape is not a traitor"

ПРИМЕЧАНИЕ. На самом деле это то же самое, что и исходный подход модуля-шаблона, который я предложил, только без методов доступа get и set и кодированные по-разному.

1 голос
/ 13 ноября 2010

Вызовите функцию как globVar('myVar','myVarValue')

function globVar(variable,value){
   window[variable] = value;
}

Вот jsfiddle: http://jsfiddle.net/emQQm/

0 голосов
/ 13 ноября 2010

window.variable = variable;

Не понимаю, что такое «автоматический режим», так что это может быть не так, как вы хотели.

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