4

为了保持全局命名空间干净,我的 JavaScript 代码是这样包装的:

(function() {
    /* my code */
})();

现在我在这个范围内声明了一些变量,我想使用变量变量名(例如名称为'something' + someVar)来访问这些变量。在全局范围内,我会简单地使用window['varname'],但显然这不起作用。

有什么好方法可以做我想做的事吗?如果不是,我可以简单地将这些变量放在一个对象中以使用数组表示法......

注意:eval('varname')不是可接受的解决方案。所以请不要这样建议。

4

3 回答 3

8

这是一个很好的问题,因为this它不指向匿名函数,否则您显然只会使用this['something'+someVar]. 即使使用 deprecatedarguments.callee在这里也不起作用,因为内部变量不是函数的属性。我认为你必须通过创建一个持有者对象来完全按照你的描述做......

(function() {
  var holder = { something1: 'one', something2: 2, something3: 'three' };

  for (var i = 1; i <= 3; i++) {
    console.log(holder['something'+i]);
  }
})();
于 2011-02-05T14:34:35.337 回答
2
(function(globals) {
    /* do something */
    globals[varname] = yourvar;
})(yourglobals);
于 2011-02-05T13:52:26.087 回答
1

邪恶的解决方案/黑客:将您需要的变量放在帮助对象obj中,并避免通过使用 use with(obj){ your current code ... }将当前用途更改为点表示法

于 2011-02-05T14:47:05.710 回答