Re: var
すぎたです。
新年、あけましておめでとうございます。
In message news:bss3ka$2mhh@utogw.gssm.otsuka.tsukuba.ac.jp
<kuno@gssm.otsuka.tsukuba.ac.jp> wrote ...
> だからsetTimeout()に文字列渡しちゃいけないと思ってます。関数渡
> せばスコープはまっとうに制御できるでしょ? なんでみんな文字列渡し
> たりevalしたりとか好きなのかなあ。
まぁ evaluate は 1.0 からの仕様ですので、意味のあまり無いこと
ではあるけど、必要があれば関数渡し、必要なければ文字列でと
しています。
元の問題に関して、見たときは eval と Function を思いついて、
window['vars'] は全然思いつかなかったです。(^^;
ただ、eval だとローカルでも使えるという利点はあると思います。
function test() {
var sq = 'sq';
var sw = 'sw';
var se = 'se';
var sr = 'sr';
var st = 'st';
alert(se); // se
var v = new Array('q','w','e','r','t');
for (var i=0; i < v.length; i++)
eval('s'+v[i]+"='s'+"+i); // s? = 's' + i
alert(se); // s2
}
test();
で、変数を何らかの方法で配列として扱うことについて、なにか
意味があるかというと・・・
おそらく、その変数を使っている部分の可読性が上がるとかいう
話になると思うのですが、変に小細工しても、他の人が見たとき
初期化部分等がわかりづらいという、本末転倒になりそうな方法
ですので、あまりお勧め出来ないところです。> 板橋さん
やりたいことというのは、ある程度の可読性があって、ループで
アクセス可能(ただしアクセス名は別配列等でも可?)な方法という
ことになる気もしますので、(制限された)仕様のなかで考えると、
連想配列を使って、
var s = new Array();
s['q'] = 'sq';
s['w'] = 'sw';
s['e'] = 'se';
s['r'] = 'sr';
s['t'] = 'st';
alert(s['e']); // se
var v = new Array('q','w','e','r','t');
for (var i=0; i < v.length; i++)
s[v[i]] = 's' + i;
alert(s['e']); // s2
といったあたりではどうでしょうか。
--
杉田
sugi-nws@bk.iij4u.or.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735