Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #33680
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Newsgroups | comp.lang.javascript |
| Subject | Re: Reference var in (function(){})() |
| Date | 2017-08-02 11:33 +0200 |
| Organization | PointedEars Software (PES) |
| Message-ID | <1922855.Mh6RI2rZIc@PointedEars.de> (permalink) |
| References | <KZ-dnfr95s94f-LEnZ2dnUU7-bnNnZ2d@westnet.com.au> <3122783.iIbC2pHGDl@PointedEars.de> |
Thomas 'PointedEars' Lahn wrote:
> Andrew Poulos wrote:
>> I'd like to reference them in a for loop e.g.
>>
>> for (i = 0; i < len; i++) {
>> eval("opt" + i) = ...
>> }
>>
>> but how can I do it without using eval?
>
> You cannot. Therefore, use an Array instance –
>
> […]
>
> – or an Object instance –
>
> var con = (function () {
> /* “opt” then refers to an object that does not inherit properties */
> var opt = Object.assign(Object.create(null), {
> 0: {},
> 1: {},
> 2: {},
> 3: {}
> // , ...
> });
>
> function x ()
> {
> for (var i = 0; i < len; ++i)
> {
> // opt[i] = ...
> }
> }
>
> // x(…)
> })();
>
> – instead.
Note that, with exceptions, the better approach is not to rely on the scope
chain, but to pass a reference to the pertaining object:
var con = (function () {
/* “opt” then refers to an object that does not inherit properties */
var opt = Object.assign(Object.create(null), {
0: {},
1: {},
2: {},
3: {}
// , ...
});
function x (obj)
{
for (var i = 0; i < len; ++i)
{
// obj[i] = ...
}
}
// x(opt)
})();
This way, not only is the effective scope chain shorter, which is faster,
but also the function code can be moved elsewhere for reuse without
necessarily modifying it further. For example,
function x (obj)
{
for (var i = 0; i < len; ++i)
{
// obj[i] = ...
}
}
var con = (function () {
/* “opt” then refers to an object that does not inherit properties */
var opt = Object.assign(Object.create(null), {
0: {},
1: {},
2: {},
3: {}
// , ...
});
// x(opt)
})();
works just as well.
--
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.
Back to comp.lang.javascript | Previous | Next — Previous in thread | Find similar | Unroll thread
Reference var in (function(){})() Andrew Poulos <ap_prog@hotmail.com> - 2017-08-01 12:09 +1000
Re: Reference var in (function(){})() "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2017-08-01 09:39 +0200
Re: Reference var in (function(){})() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-01 12:40 +0200
Re: Reference var in (function(){})() Andrew Poulos <ap_prog@hotmail.com> - 2017-08-02 14:06 +1000
Re: Reference var in (function(){})() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-02 11:38 +0200
Re: Reference var in (function(){})() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-02 11:33 +0200
csiph-web