鍍金池/ 問答/HTML/ 計(jì)時(shí)器問題最小時(shí)間粒度

計(jì)時(shí)器問題最小時(shí)間粒度

function getMini(){
  var i=0;
  var start=Date.now();
  var clock=setTimeout(function(){
      i++;
      if(i==1000){
        clearTimeout(clock);
        var end=Date.now();
        console.log((end-start)/i);
      }
      clock=setTimeout(arguments.callee,0);
  },0);
  }
getMini();

雖然經(jīng)??吹揭灿杏眠^var timer=setTimeout()z這樣的形式,但是不太懂為什么計(jì)時(shí)器得用一個(gè)變量聲明,是不是不用變量聲明,就清楚不了時(shí)間? clock=setTimeout(arguments.callee,0);這句話又是什么意思呢,arguments。callee指向當(dāng)前正在調(diào)用的函數(shù)即這個(gè)匿名function,但是不是在內(nèi)部js全部執(zhí)行完畢之后就再次只調(diào)用一次function嗎?看代碼的意思是clock執(zhí)行了1000次啊

回答
編輯回答
孤毒

1.定時(shí)器運(yùn)行之后會(huì)返回一個(gè)id,代表他的唯一標(biāo)識(shí),就像你的身份證號(hào)一樣,這個(gè)id對(duì)你而言唯一的作用就是使用它來清除定時(shí)器,就像你下面代碼中寫的那樣

clearTimeout(clock)

2.setTimeout雖然是個(gè)一次性的定時(shí)器,但這個(gè)例子中是采用了循環(huán)調(diào)用的方式,每次定時(shí)器執(zhí)行的時(shí)候都會(huì)重修定制下一個(gè)定時(shí)器,直到i為1000的時(shí)候,取消這個(gè)定時(shí)器。

不過你確定你這個(gè)例子可以正常運(yùn)行?先取消定時(shí)器,在設(shè)置定時(shí)器,是沒用的。得先設(shè)置,在根據(jù)判斷條件取消。

2018年1月1日 07:21