2010年10月25日月曜日

無名関数(匿名関数)を再帰的に呼び出す

JavaScriptでは、無名関数の中で "arguments.callee()"を実行することにより、無名関数を再帰的に呼び出すことができる。

※Javaをやる人の間では匿名関数と呼ぶのが主流だが、JavaScriptをやる人は無名関数と呼ぶ場合が多い?

例:ID "foo" をもつDOM要素の、5階層以上の親に当たるTABLE要素を探し出してstyle属性をクリアする。

<script type="text/javascript">
(function(id){
  var elm = document.getElementById(id); // 指定されたidをもつ要素

  if(elm){
    var cnt=0;
    var target = (function(o){ // 再帰的な無名関数
      if(cnt >= 5 && o.tagName == 'TABLE') {
        return o; // 条件を満たす要素
      } else {
        cnt++;
        return arguments.callee(o.parentNode); // 親要素に対し無名関数を適用
      }
    })(elm);
    target.style.cssText = ''; // 目的の要素のスタイルを変更
  }

})('foo');
</script>

0 件のコメント:

コメントを投稿