タイマーとタイマーオフ



0   名前: KR : 2007/07/26(木) 22:56  ID:JrLcTjC3 sub-t1
はじめまして。
setTimeout();をループで多用すると良くない(場合によってはエラーが出る)と本で読んだ事があります。
なので、setTimeout()を書いた後は、必ず、clearTimeout()を置いた方が良いらしいのですが、
自分の場合、

var timer_a ;  //本では、var timer_a=setTimeout("" , 0) としていました。
var i = 0 ;

と定義して、

function test() {

〜〜〜何か処理〜〜〜
〜〜〜〜〜〜〜〜〜〜

i++

if ( i < 1000 ) {
clearTimeout(timer_a) ;
timer_a = setTimeout("test();" , 2000 ) ;
}

}


と言う感じで記述しています。
この書き方は、おかしいですか?これで、エラーは防げますか?
あと、最初のvarの定義の仕方はおかしいですか?

1   名前: 匿名 : 2007/07/26(木) 22:56  ID:/I7AxP9P sub-Cz
これは何を意図したものですか? 2 秒ごとに test() を実行、それを 1000 回繰り返すということですか?

ならばこの場合、理屈上は clearTimeout() は不要と思う。test() が実行されたということは、以前の実行 ID(timer_a)はすでに消費済みだから。まあ、不安ならやっといても良いけど。

と言うか、setInterval() を使ったら?

> これで、エラーは防げますか?

『エラー』の意味が分からない。タイマ絡みの不具合のほとんどは、制作者が実行順序をイメージできてないために、無駄なプロセスを大量に作り出すことで生じている。生じうるエラーもさまざまだ。

clear(Timeout|Interval) するかしないかは、大して関係ない(もちろん、必要なときに clear することは当然として)。

> 最初のvarの定義の仕方はおかしいですか?

別におかしくないよ。難を言えば、グローバル変数と分かるような変数名にしとけくらい(i なんてグローバル変数は最悪)。『本』の方の記述の意図は分からないでもないが、無意味だと思う。

2   名前: KR : 2007/07/26(木) 22:56  ID:JrLcTjC3 sub-t1
そうですか。

ありがとうございました。


一覧へ戻る