Javascript 全局变量

标签 javascript variables global

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

所以像这样:

function globVar(variable){
   window.variable;
}

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

编辑

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

最佳答案

很抱歉这么说,但是您收到的答案是您应该远离的坏习惯。一个更好的编程实践,也许是正确的编程实践,是对全局变量进行伪命名空间,以免弄乱全局命名空间/范围。这背后的原因是让您的代码更易于管理,更重要的是,如果/当您的应用程序变大时,让您的生活更轻松。定义命名空间的一种简单机制是使用由道格拉斯·克罗克福德 (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;
}();

要使用它,您只需像调用对象的方法一样调用它。

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

如果您想简化操作,您也可以公开 globals 变量而不是使用 setGlobVargetGlobVar 方法来使用它访问变量。


重点是通过创建您自己的命名空间,尽可能远离在全局命名空间(即 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"

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

关于Javascript 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4173835/

相关文章:

javascript - knockout.js 中的事件处理程序模型更改

javascript - console.log() 显示变量值实际变化前的变化值

c# - 为什么不能设置公共(public) Var?

java - 在内部方法中使用变量声明

python - 在类里面创建列表的更好方法?

javascript - 使用 polyfill 可以在多大程度上模拟 Shadow DOM?

javascript - Angular 翻译指令中的 XSS

javascript - 基于事件导航选项卡的动态 MVC Razor href

windows - 选择热键

javascript - 避免 namespace 污染的模式