素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

setIntervalの便利版

setIntervalは、登録したcallback関数のthisがおかしくなったり、callback関数に値を渡すのが面倒臭かったり(値を渡すにはsetIntervalの第三引数を使えばいいけど、それだと引数が固定されちゃう)、タイマーのidが、setIntervalの戻り値にしか渡されないから、callback関数内でclearIntervalするためには変数に保持しなきゃいけなかったり、少し不便。

var timer = {
  loop: function(fn, ms, v) {
    var self = this,
    id = null;
    return id = setInterval(function(n) {
      v = fn.call(self, v, id, n);
    },
    ms);
  },
  one: function(fn, ms, v) {
    var self = this,
    id = null;
    return id = setTimeout(function(n) {
      fn.call(self, v, id, n);
    },
    ms);
  }
};

timer.loop(function(i, id) {
  if (i >= 100) {
    clearInterval(id);
    return;
  }
  document.body.textContent = i;
  return i + 1;
},
10, 0);