【发布时间】:2015-07-06 14:26:04
【问题描述】:
请查看以下 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.
这种行为的原因是什么?
【问题讨论】:
-
setInterval 不精确
-
之前已经回答过了。我相信
setTimeout和setInterval的最小精度为 4~5 毫秒(因为它实际上说“在当前函数之后,大约在 n 毫秒内”),所以你不会得到它每毫秒运行一次。它已经在 SO 上展示过,但是在哪里... -
除了不精确之外,它们只是保证最低限度。它们的真正意思是“在 x 毫秒后的某个时间 [重复] 运行此代码”
-
你不能保证他们会被定期调用,不。如果有人移动到另一个选项卡,浏览器可以并且会限制对
setInterval回调的调用。如果你需要根据时间流逝做事情,你需要使用Date对象或window.performance.now(),记录你的回调被最后一次调用的时间间隔。
标签: javascript settimeout setinterval timing