为了保持全局命名空间的清洁,我的JavaScript代码包含如下:
(function() {
/* my code */
})();
现在我在此范围内声明了一些我想使用变量名称访问的变量(例如,名称为'something' + someVar
)。
在全球范围内,我只使用window['varname']
,但显然这不起作用。
有没有一个好方法可以做我想要的?如果不是,我可以简单地将这些变量放在对象中以使用数组表示法......
注意:eval('varname')
不是可接受的解决方案。所以请不要建议。
答案 0 :(得分:8)
这是一个很好的问题,因为this
没有指向匿名函数,否则你显然只会使用this['something'+someVar]
。即使使用已弃用的arguments.callee
也不起作用,因为内部变量不是函数的属性。我认为您必须通过创建持有者对象来完成您所描述的内容......
(function() {
var holder = { something1: 'one', something2: 2, something3: 'three' };
for (var i = 1; i <= 3; i++) {
console.log(holder['something'+i]);
}
})();
答案 1 :(得分:2)
(function(globals) {
/* do something */
globals[varname] = yourvar;
})(yourglobals);
答案 2 :(得分:1)
邪恶的解决方案/黑客:将您需要的变量放在帮助程序对象 obj 中,并避免使用with(obj){将当前用途更改为点表示法您当前的代码 ...}