2014年7月22日火曜日

JavaScriptのタイマ

JavaScriptはイベントドリブン型のプログラム言語です。
Cのように固定的にmain()関数から順に実行されるということはなく、
コンテンツのロードイベントによって最初の関数が実行され、
その後はさまざまなイベントに応じていろいろな関数が呼ばれていきます。
こういうシステムがあることを Visual Basic 2.0 で初めて知ったときには衝撃を受け、
そこからオブジェクト指向とかそっちに突っ走った記憶があります。
ただし私自身はコンパイル後のマシンコードを想像しながらCで書くのが一番好きです。
抽象度が高い言語はやりたいことをさっさと実現する手段として便利なのですが、
BASIC→アセンブラ→Cな私はやっぱり低抽象度が好き。

ところでJavaScriptで最初の関数をC風にぐるぐる回して
イベントの発動と関係ない処理をやってしまうのはひとつの手なんですが、
通常はタイマーを使って一定間隔でイベントが発行されるようにします。
var t1;
window.onload=function(){
 t1=setInterval("t1event()",1000);
};
function t1event(){
 // run once per 1 sec.
}
などとすれば1秒ごとにt1event()が自動的に呼ばれます。
もしタイマーイベントを1回だけ起こしたいとき(ワンショット)は
setInterval()の代わりにsetTimeout()を実行します。
なお、タイマーを止めるには
clearInterval(t1);
を実行します。

ちなみにJavaScriptは基本的に1スレッドで実行されるようですが、
先のonloadイベントとt1event()は別コンテキストで動作するようです。
普通に使っている分には意識する必要はありません。
しかし低抽象度が好きな私はこういうの結構気になるんですよね。

0 件のコメント:

コメントを投稿