How to access variable dynamically inside an anony

2020-03-24 05:31发布

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.

3条回答
劳资没心,怎么记你
2楼-- · 2020-03-24 06:11

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]);
  }
})();
查看更多
何必那么认真
3楼-- · 2020-03-24 06:15

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... }

查看更多
霸刀☆藐视天下
4楼-- · 2020-03-24 06:22
(function(globals) {
    /* do something */
    globals[varname] = yourvar;
})(yourglobals);
查看更多
登录 后发表回答