如何在匿名函数/闭包中动态访问变量?
为了保持全局命名空间干净,我的 JavaScript 代码是这样包装的:
(function() {
/* my code */
})();
现在我在此范围内声明了一些变量,我想使用变量变量名称来访问这些变量(例如名称为 'something' + someVar
)。 在全局范围内,我只需使用 window['varname'],但显然这不起作用。
有没有好的方法来做我想做的事?如果不是,我可以简单地将这些变量放入一个对象中以使用数组表示法...
注意:eval('varname')
不是一个可接受的解决方案。所以请不要建议这样做。
To keep the global namespace clean, my JavaScript code is wrapped like this:
(function() {
/* my code */
})();
Now I have some variables declared in this scope which I want to access using a variable variable name (e.g. the name is 'something' + someVar
).
In the global scope I'd simply use window['varname']
, but obviously that doesn't work.
Is there a good way to do what I want? If not I could simply put those variables inside an object to use the array notation...
Note: eval('varname')
is not an acceptable solution. So please don't suggest that.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个很好的问题,因为
this
并不指向匿名函数,否则您显然只会使用this['something'+someVar]
。即使使用已弃用的arguments.callee
在这里也不起作用,因为内部变量不是函数的属性。我认为你必须通过创建一个持有者对象来完全按照你所描述的那样做......This is a good question because
this
doesn't point to the anonymous function, otherwise you would obviously just usethis['something'+someVar]
. Even using the deprecatedarguments.callee
doesn't work here because the internal variables aren't properties of the function. I think you will have to do exactly what you described by creating either a holder object...邪恶的解决方案/黑客:将您需要的变量放入辅助对象obj中,并避免使用 use with(obj){ 将当前使用更改为点表示法您当前的代码... }
evil solution/hack: Put the variable you need in a helper object obj and avoid having to change current uses to dot notation by using use with(obj){ your current code... }