我应该如何创建一个变化的变量作为全局变量?
所以像这样:
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
变量而不是使用 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
访问器方法并且编码不同。
关于Javascript 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4173835/