« メッセージキュー事始め in Perl - コマンドラインクライアントを作ってみた | メイン | djbdns にパッチをあてて Anti-DNS Pinning 対策 »
2007年11月08日
Re: for 文を setTimeout に変換する
for 文を setTimeout に変換する - IT戦記の件。おもしろい。自分だったらこう書くかなと思いました。
function timeout_for(f1, f2, f3, fe) {
var i = typeof f1 === 'function' ? f1() : f1;
var rep = function () {
if (typeof f2 === 'function' ? f2(i) : (i < f2)) {
setTimeout(
function () {
fe(i);
i = typeof f3 == 'function' ? f3(i): i + 1;
rep();
},
10);
}
};
rep();
}
簡単な使い方 (for (i = 0; i < 3; i++) に相当)
timeout_for(
0, 3, 1,
function (i) {
alert(i);
});
条件をコールバックで設定
timeout_for(
function () { return 0; },
function (i) { return i < 3; },
function (i) { return i++; },
function (i) {
alert(i);
});
変数は外部で保持しても良い
var i = 0;
timeout_for(
function () {},
function () { return i < 3; },
function () { i++ },
function () {
alert(i);
});
もちろんネストも可能
timeout_for(
0, 3, 1,
function (i) {
timeout_for(
1, 4, 1,
function (j) {
alert(i + ',' + j);
});
});
あとは、同一のインターフェイスをもつ非timeout版の実装を用意しておいて、切り替えて使うとか。
function ordinal_for(f1, f2, f3, fe) {
for (
var i = typeof f1 == 'function' ? f1() : f1;
typeof f2 === 'function' ? f2(i) : (i < f2);
i = typeof f3 === 'function' ? f3(i) : i + 1) {
fe(i);
}
}
timeout_for(0, 3, 1, function (i) { alert(i); });
ordinal_for(0, 3, 1, function (i) { alert(i); });
投稿者 kazuho : 2007年11月08日 16:19
トラックバック
このエントリーのトラックバックURL:
https://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/1636
このリストは、次のエントリーを参照しています: Re: for 文を setTimeout に変換する:
» [javascript][async]ループをsetTimeoutでまわす、Afrous版 from snippets from shinichitomita’s journal
for 文を setTimeout に変換する - IT戦記 Kazuho@Cybozu Labs: Re: for 文を setTimeout に変換... [続きを読む]
トラックバック時刻: 2007年11月08日 21:36
» javascript - setTimeout()化とネスト from 404 Blog Not Found
amachangの例題の場合もそうだが、これには一つ問題がある。
Kazuho@Cybozu Labs: Re: for 文を setTimeout に... [続きを読む]
トラックバック時刻: 2007年11月09日 23:22