setTimeout 在 IE 中执行得很快

setTimeout is executing fast in IE

我正在尝试显示元素值的数字计数器动画,并且 setTimeout() 在 firefox 中作为指定时间工作,但由于某些原因在 IE 中它被快速调用。

Jsfiddle Code

下面是我的代码..

$('document').ready(function() {
  var i=1,data=10;
  my_int=setInterval(
     function () { 
        if(i<=data)
          $('p').text(i++);
        else
          $('body').append("overflow"); }
     ,64);
setTimeout(function() { $('body').append("done");clearInterval(my_int); },64*data);
});

我的意思是 IE setInterval() 执行了 8 次,然后它调用超时函数(虽然它应该循环 10 次)。

我也解决了这些问题,但其中 none 帮助了我。 one two

IE的问题还是我代码本身的问题??

我猜测这是一个竞争条件,并建议这可能是实现相同目标的更好方法:

$('document').ready(function() {
    var i = 1, data = 10;
    my_int = setInterval(function () {
        if (i <= data) {
            $('p').text(i++);
        }
        else {
            $('body').append("overflow").append("done");
            clearInterval(my_int);
        }
    }, 64);
});

为了回答您的实际问题,您的代码可能存在问题,但由于 IE 的计时系统的性质,该问题才很明显。您的代码取决于时间安排,但这些时间安排不能 得到保证。当您说 "do this every X milliseconds" 时,实际发生的是系统将 尝试 尽可能接近请求的时间来执行您的代码。但是,当有其他事件 运行 并且这些事件的执行使它们在您请求的时间内 运行 时,它可能无法执行此操作。