Path: csiph.com!aioe.org!news.mb-net.net!open-news-network.org!.POSTED.69.235.197.178.dynamic.wless.lssmb00p-cgnat.res.cust.swisscom.ch!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: comp.lang.javascript Subject: Re: Reference var in (function(){})() Date: Wed, 02 Aug 2017 11:33:09 +0200 Organization: PointedEars Software (PES) Lines: 95 Message-ID: <1922855.Mh6RI2rZIc@PointedEars.de> References: <3122783.iIbC2pHGDl@PointedEars.de> Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit Injection-Info: gwaiyur.mb-net.net; posting-host="69.235.197.178.dynamic.wless.lssmb00p-cgnat.res.cust.swisscom.ch:178.197.235.69"; logging-data="25884"; mail-complaints-to="abuse@open-news-network.org" User-Agent: KNode/4.14.2 X-User-ID: U2FsdGVkX19Dp4nZStnDdUq+Jlwz9hsTjpGdRML2mbNNtrD/fGcQYQ== Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEXTxa4RFk5dUWANED8PFEfy7+MGBiW+n3ZNF/QuAAACaElEQVQ4jVXUwVOcMBQG8Dc7Rc4PUntdWV2uxjDpGaGeozOp1woar4jd5t/v9wLstMwsA/ntlxdCAgUc1hjTc9/JCZfGoo3wG3HdmdAWrIJRHe7GM/TmpY5VFefuVcAkkPbLIaN8rmPmjloyZxgyR3GuJ4K0AGtJ2htz8o7yqikm759fldQXaMpbDzjKAG+8v+AugVTOPO5DOjLvGtUYQwh0CPjnVMyGd+8/GfUB5nLKJDD2aLDh5HYyMDJGDwQIo2ZmZcKbowNmAdB/AzyFhrmF2MHRb0QJJfaAnwGB6orZhoykLzJtGwF/xpYxI1dswomiUj3gTuAIqCn/4C7cULwGNBtwMTk3Y4LfKB5YUaOKBKYtpplm7u0vip8tU1NWWyI/7XdcSuIDoMt6rVHMWT0DbjHPGqDqZVSa6zleLcUTcIKLoMv3ueJluALtAo9B302zPPlrtiVScRdCjXvVh3e3JpYa/jjkuC9N+LrBMlz/eAN4eQijX2EdLo6c5tGGHwLyHFtXk89dDGHwCVhG9T0S/j55AhRZgkMCmUQXJ49TnS1wnQDvw0eAh9ICeMmEFbCnPMFzjAvsWoEWEFdYEx+S0MoUZ1gT1wId8+AF3Bl2OoEu906AUHx5VLw/gXYg/x84loOah/2UYNrgiwSwGO7RfUzVBbx/kgpckumGOi6QirtD6gkLTitbnxNol47S2jVc2vsN5kPqaAHT8uUdAJM4v/DanjYOwmUjWznGfwB7sGtAtor5BgofDuzaRj4kSQAqDakTsKORa3Q3xKi3gE1fhl71KRMqrdZ2AWNNg/YOhQyrVBnb+i+nEg4bsDA+egAAAABJRU5ErkJggg== Cancel-Lock: sha1:H61kpOChzwGTRR2cRSqCNdZS4/E= X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. 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: | | Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.