JavaScriptでプログラムを組んでいて、使い捨ての関数を再帰的に呼び出したいと思い、即時関数とarguments.callee
プロパティを使うことにしました。 arguments.callee
プロパティはJavaScriptの参考書で読んだことあるので知っていたんですが、いつ、どこで即時関数なんて覚えたんだろう...
以下はクリックした際に画面を点滅するプログラムです。
document.onclick = function(e) {
var blinked = false;
( function() {
if(blinked) {
document.bgColor = "#ffffff";
} else {
document.bgColor = "#ffe8c0";
blinked = true;
setTimeout(arguments.callee, 100);
}
} )();
}
onclick
イベントで行っている処理は非常にシンプルです。 まず、クリックされたら、変数blinked
にブール値false
を代入します。 そして、即時関数(function() { ... })()
を実行します。 即時関数では、変数blinked
を評価し、true
ならば背景色を#ffffff
(白)にし、 false
ならば背景色を#ffe8c0
にし、blinked
にtrue
を代入し、100ミリ秒後に即時関数自身をarguments.calleeプロパティを用いて再帰呼び出しします。
所感
即時関数やarguments.callee
プロパティって、こういう時に使うんだなぁ、ってのを実際使ってみて実感したわけですが、正直、あまり好きな記述方法ではないです... あまりJavaScriptが好きじゃない...というより少し嫌いだからかもしれませんが 便利ではあるんですけどね...
参考文献