setInterval の挙動を学習しました
CloudCloudCloudってのを作ってまして。 Facebook上で zonoise さんにいろいろ教えてもらってて。 で指摘受けたところをなおそうとしてたらハマったわけです、setIntervalの挙動に。
|
|
でbashでいうところの
|
|
みたいなのを想像してた。 1 → 2 → setInterval(つまりsleep) → 3 → 1 → 2 → setInterval(つまりsleep) → 3 … と実行されるだろう、という期待をしてたので、 1 → 3 → setInterval(つまりsleep) → 1 → 3 → setInterval(つまりsleep) → 1 → 3 → setInterval(つまりsleep) … → 2 → 2 → 2 → … みたいな挙動に面食らったわけです。 で、Twitter上でotherworldyさんにもアドバイス受けたりしてようやく理解したわけですねー。
|
|
ってのは、 INTERVALが過ぎないとsetIntervalで括ったfunction(){ action(i) }は、 全く実行されないんですね。 でその外側においておいた for の i++ がどんどん実行されるがために、 action の引数として利用しようと考えていたfor文由来の変数iが、 forの想定した最大値まで達しちゃうわけですねー。
「じゃあお前は結局どうしたのか?」っていうと for文を使うのをやめました。 そもそもsetIntervalがループの役目果たしてたので、
|
|
としました。すげーすっきりした。 ※ちなみに action2 には “window.location.reload();” を想定していた。