for 文を setTimeout に変換する(継続風)
for 文を setTimeout に変換する - IT戦記が楽しそうだったので、久しぶりにJavaScriptを書いてみた。
継続風に書くと、通常のforループとsetTimeout付きforループが同じようになります。
JavaScriptも楽しいなぁ。また、書きたい。
// 通常版 forloop(0, 3, 1)(function(i, cont){ forloop(0, 7 ,1)(function(j, cont){ console.log('a' + i + "-" + j); cont(); }, cont); }, function(){}); // timeout版 to_forloop(0, 3, 1)(function(i, cont){ to_forloop(0, 7 ,1)(function(j, cont){ console.log('a' + i + "-" + j); cont(); }, cont); }, function(){});
forloopとto_forloopはこんな感じです。
// from http://d.hatena.ne.jp/amachang/20071108/1194501306 var to = function() { var f = Array.prototype.shift.apply(arguments); args = arguments; return setTimeout(function() { f.apply(null, args) }, 10); }; function forloop(i, j, k){ var l = i; var a = function a(f, cont){ if (l >= j) { return cont(); } f(l, function(){ l += k; a(f, cont); }); } return a; } function to_forloop(i, j, k){ var l = i; var a = function a(f, cont){ if (l >= j) { return cont(); } to(f, l, function(){ l += k; a(f, cont); }); } return a; }