常に今更な内容ですが、色々コードを読んでいて見つけたarguments.calleeの使い方のパターンを書き留めておきます。
非同期の完了待ち
一定の条件が成立するまでタイマーで待機するパターンです。例えばJavascript等の遅延読み込みの完了待ち等です。
setTimeout(function() {
    if (完了条件) {
        完了時の処理
    }
    arguments.callee();
}, 15.625);
これなら汎用の関数がかけますね
function wait(condition, callback) {
    var _condition = (typeof condition == "string") ?
                     function() { return eval(condition); } : condition;
    if (_condition()) {
        callback && callback();
    }
    setTimeout(function() {
        if (_condtion()) {
            callback && callback();
        }
        arguments.callee();
    }, 15.625);
}
使い方はこんな感じ
foo.js
FOO = {}
FOO.bar = function() {
    alert("Hellow");
}
JavaScriptの遅延ロード
var s = document.createElement('script');
s.src = "foo.js";
s.type = 'text/javascript';
s.defer = 'defer';
document.getElementsByTagName('head').item(0).appendChild(s);
wailt("FOO", function() {
   FOO.bar();
});
再帰呼び出し
どうもこれが最も典型的な使い方みたいですね。
function Factorials(x) {
    if (x <= 1) {
        return 1;
    }
    return x * arguments.callee(x - 1);
}
ただし、もっと本質的には無名関数である必要がありますが・・・
