へっぽこ社会人4年生がプログラミングを頑張る

へっぽこ社会人4年目がプログラミング系統を中心に書きたいことをつらつらと書きます

JavaScriptの即時関数内でarguments.calleeプロパティを使って再帰する

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にし、blinkedtrueを代入し、100ミリ秒後に即時関数自身をarguments.calleeプロパティを用いて再帰呼び出しします。

所感

即時関数やarguments.calleeプロパティって、こういう時に使うんだなぁ、ってのを実際使ってみて実感したわけですが、正直、あまり好きな記述方法ではないです... あまりJavaScriptが好きじゃない...というより少し嫌いだからかもしれませんが 便利ではあるんですけどね...

参考文献