Home > 技術 > jQueryの再帰呼び出しはとってもトリッキー

jQueryの再帰呼び出しはとってもトリッキー

再帰呼び出しは関数内で自分自身を何回か呼ぶことを指しますが、jQueryの再帰呼び出しはちょっぴりオシャレ。

例えば2340行目あたりでブラウザ毎の処理をしていますが、あるタイミングまでひたすら再帰呼び出しをしています。

jQuery:1.2.6

// If IE is used and is not in a frame
// Continually check to see if the document is ready
if (jQuery.browser.msie && window == top)(function () {
    if (jQuery.isReady)return;
    try {
        // If IE is used, use the trick by Diego Perini
        // http://javascript.nwbox.com/IEContentLoaded/
        document.documentElement.doScroll("left");
    }
    catch (error) {
        setTimeout(arguments.callee, 0);
        return;
    }
    // and execute any waiting functions
    jQuery.ready();
}
)();

一見単にif文があるだけのように見えますが、if文のすぐ右側から無名関数を記述しています。
そしてその無名関数内で「setTimeout( arguments.callee, 0 );」をしているので自分自身は無名関数になる。
おお~!これなら再帰呼び出しされるのは無名関数内にとどまるからコードを見ていても理解しやすい。

以下適当に作ったサンプルコード。
遠目で見ると関数が存在しないように見えますが、if文の右側から関数が始まっています。

var num = 0;
if (num == 0)(function () {
    try {
        num++;
        if (num != 5)throw "hoge hoge";
    }
    catch (error) {
        // numが5になるまで再帰呼び出し
        setTimeout(arguments.callee, 0);
        return;
    }
    // 5
    console.log(num);
    }
)();

値の監視をとかをするときにこのトリックは使えそうですね。

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

Trackback:0

TrackBack URL for this entry
http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1034
Listed below are links to weblogs that reference
jQueryの再帰呼び出しはとってもトリッキー from HouseTect, JavaScript Blog

Home > 技術 > jQueryの再帰呼び出しはとってもトリッキー

このブログについて
author:hisasann.com

description:就職しました!
最近はJavaScript、Perl、Rails、Java(Struts+Spring+iBatis)なんかをいろいろといじっています。
今猛勉強中なのがActionScriptです。
アニメーション楽しい!



他に運営しているブログ:

利用しているWebサービス :


Tag cloud
カテゴリー
月別アーカイブ
jQuery Meetup

Visit jQuery Meetups
Powered by
Powered by
Movable Type Commercial 4.261

Page Top