すぎたです。

In message news:YML1b.25$Ce5.7@news1.dion.ne.jp
"ITAHASHI Kunio" <kunitahashi@h2.dion.ne.jp> wrote ...

> 上のスクリプトで
>   for (i=0; i < n; i++) {
> のfor文に使われている変数 i はその後どこにも出て来な
> いのですが、どこへ行って何をしてるんでしょうか?

あ、すみません。はじめに訂正です。
>   for (i=0; i < n; i++) {
ここは、他で i が使われているかもしれませんので、
    for (var i=0; i < n; i++) {
の方が良かったでした。
# もしくは、手前で var i; としてください。

i についてですが、n 回のループを行うための判定に使われて
いる以外は、どこにも使われていません。

変数を用いているのは、for 文だと n 回のループを実現する
ためには、n 回繰り返し実行したかどうかを、何らかの方法で
判定する必要があるためです。

n 回繰り返し実行したか調べるためには、適当な変数をカウント
アップして、その変数が n 回に達したかどうかを判定するのが
一般的で、今回の場合、
  (1) i を 0 で初期化
  (2) i が n より小さければ { } 内を実行し、(3) へ進む。
      そうでなかったら(i が n 以上だったら)、(4) へ進む。
  (3) i を +1 カウントアップして、(2) へ戻る。
  (4) for 文を終了する(ループを抜ける)。
といった制御を for 文で行うための判定に、i が使われています。

# i は n が 30*5=150 なので、0,1,2,...,147,148,149 と進み、
# { } 内が150回実行された時点で 149 ですので、(3) で +1
# されて、(2) に戻って i < n を判定し、150 < 150 となるため
# 条件が成立せずに (4) に制御が移って、ループを抜けます。

今回のケースでは、かならずしも i は使用する必要はなくて、
手前で n を求めていて、以後、ループ回数の判定以外には使わ
れていないことから、この n をカウントダウンすることでも
n 回のループを実現できます。

この場合、n は既に初期化されており、判定条件としては、
n が 初期値 150 から始まって、1回ループを実行してから
1カウントダウンすると149となり、150回ループを繰り返すと、
150回目のループを実行して1カウントダウンすると、
0になります。
つまり、n は初期化済みで、n が 0 より大きいとき処理を
繰り返し、各処理後 1 づつカウントダウンして、0 以下で
抜けるようにすれば、150回のループが実現できるという
ことになり、これを for 文で表現すると
  for ( ; n > 0; n--) {
    〜
  }
となります。
もちろん、n の初期化は for 文で行ってもかまわないのですが、
  for (var n = 30 * synd.length; n > 0; n--) {
    〜
  }
少し長くなりますので、好みの方で良いかと思います。

-- 
杉田
sugi-nws@bk.iij4u.or.jp