すぎたです。

新年、あけましておめでとうございます。

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