请参阅以下JavaScript代码:
var cis_current_time = 0;
setInterval(function() {
cis_current_time += 1;
},1);
$("#timingInfo").html(cis_current_time);
setTimeout(function() {
$("#timingInfo").html($("#timingInfo").html() + ', ' + cis_current_time);
},1000);
结果我除了得到0,1000,但它返回0,数字接近200
请检查fiddle.
这种行为的原因是什么?
答案 0 :(得分:1)
setInterval
和setTimeout
可能不准确。
它们由浏览器引擎执行,这意味着浏览器可以在某些情况下限制它们。举个例子,如果你的浏览器只使用一个进程来处理JavaScript,那么它们可能会被限制,或者可能比你定义的更多,因为当前使用的核心压力很大。
使用多线程JavaScript可以稍微改进一下,但无论如何 - 它们不会100%准确。
setInterval
仅保证在给定时间段内执行/调用after
。不是在确切的时间。每个区间可能存在差异。
答案 1 :(得分:0)
setInterval函数非常精确,正如您在fiddle上看到的那样。
问题在于你的代码,你试图每毫秒执行一个函数。
setInterval(function() {
cis_current_time += 1;
},1);
JavaScript是单线程的,然后,当它有很多指令时,它会堆叠它们并在它有可能时调用它们,所以,这就是为什么它在你的情况下不准确。
setInterval 不问题,JavaScript :JS可以执行函数,这就是以后执行的原因...... 每个函数都关注这个问题,所以setInterval也是......
Func(1)耗时70ms:
如果Func(1)需要130ms:
setInterval是精确的,但与JS中的每个函数有相同的问题。