Javascript全局变量

Ada*_*dam 3 javascript variables global

我应该如何创建一个变量变量作为全局变量?

像这样的东西:

function globVar(variable){
   window.variable;
}
Run Code Online (Sandbox Code Playgroud)

所以通过这种方式我也可以在自动模式下创建全局变量,而且我也可以为自己创建它们更容易:)

编辑

例如,我可以像这样创建一个全局变量:globVar('myVariable');然后myVariable将其添加到全局变量中.

Joh*_*ohn 10

很抱歉这样说,但你收到的答案都是你应该远离的坏习惯.一个更好的编程实践,也许是正确的编程实践,将伪命名空间全局变量,以免混淆全局命名空间/范围.这背后的原因是为了使您的代码更易于管理,更重要的是,如果/当您的应用程序变大时,让您的生活更轻松.定义命名空间的一种简单机制是使用由Douglas Crockford着名的模块模式.

这是一个简单的例子:

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;
}();
Run Code Online (Sandbox Code Playgroud)

要使用它,您只需将其称为对象的方法.

myNamespace.setGlobVar("secret_msg", "Dumbledore dies, so does Hedwig");
myNamespace.getGlobVar("secret_msg");
Run Code Online (Sandbox Code Playgroud)

如果要简化访问变量的方式,也可以公开globals变量而不是使用setGlobVargetGlobVar方法来使用变量.


关键是window通过创建自己的命名空间,尽可能远离定义全局命名空间(即对象)中的变量.这样可以减少名称冲突,意外重写或覆盖的可能性,以及全局命名空间的混乱.

更简单的方法是简单地定义一个对象并扩充其属性.

var globals = {};
globals.SECRET_MSG = "Snape is not a traitor"
Run Code Online (Sandbox Code Playgroud)

虽然我会通过包装globals到特定于我的应用程序的命名空间来扩展这种方法.

var myNamespace = {};
myNamespace.globals = {};
myNamespace.globals.SECRET_MSG = "Snape is not a traitor"
Run Code Online (Sandbox Code Playgroud)

注意:这实际上与我建议的原始模块模式方法相同,只是没有getset访问器方法和编码不同.

  • 海德薇死了?!:( (2认同)