- 2008-06-10 (火)
- 技術
再帰呼び出しは関数内で自分自身を何回か呼ぶことを指しますが、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);
}
)();
値の監視をとかをするときにこのトリックは使えそうですね。
- Newer: ActionScriptでクロージャを使う方法
- Older: Photoshop Elements 6.0で背景が透明な画像を作る方法
Comments:0
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


