如何在匿名函数/闭包内动态访问变量?

Thi*_*ter 4 javascript closures dynamic-variables

为了保持全局命名空间的清洁,我的JavaScript代码包装如下:

(function() {
    /* my code */
})();
Run Code Online (Sandbox Code Playgroud)

现在我在这个范围内声明了一些变量,我想使用变量名称来访问它(例如名称是'something' + someVar).在全球范围内我只是使用window['varname'],但显然这不起作用.

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

注意:eval('varname')不是可接受的解决方案.所以请不要这么做.

mVC*_*Chr 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]);
  }
})();
Run Code Online (Sandbox Code Playgroud)