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

发布于 2024-10-16 04:02:40 字数 356 浏览 2 评论 0原文

为了保持全局命名空间干净,我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

山有枢 2024-10-23 04:02:40

这是一个很好的问题,因为 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]);
  }
})();

This is a good question because this doesn't point to the anonymous function, otherwise you would obviously just use this['something'+someVar]. Even using the deprecated arguments.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...

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

  for (var i = 1; i <= 3; i++) {
    console.log(holder['something'+i]);
  }
})();
捂风挽笑 2024-10-23 04:02:40
(function(globals) {
    /* do something */
    globals[varname] = yourvar;
})(yourglobals);
(function(globals) {
    /* do something */
    globals[varname] = yourvar;
})(yourglobals);
伴随着你 2024-10-23 04:02:40

邪恶的解决方案/黑客:将您需要的变量放入辅助对象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... }

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文