タイマーとタイマーオフ
-
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
- そうですか。
ありがとうございました。