【发布时间】:2015-09-03 19:10:24
【问题描述】:
setInterval 函数中的第二个参数用于延迟执行,以毫秒为单位。正如预期的那样,1000 毫秒每秒将触发该功能。但这是一件我不太明白的奇怪事情。在第二个间隔中,我将延迟参数设置为 1 毫秒,并放入函数增量数字和条件以检查每个传递的 1000 数字。我希望它的行为就像秒间隔计时器一样。但它并没有像我希望的那样运行。
对此有什么解释吗?
// detect seconds in a second interval timer (works as expected)
setInterval(function() {
console.log('passed second from the secondInterval');
}, 1e3);
// detect seconds in a millisecond interval timer (I don't have any explanation for the behavior).
(function() {
var i = 0;
setInterval(function() {
if (i === 0) {
i++;
return;
}
if (i % 1000 === 0) console.log('passed second from the millisecondInterval');
i++;
}, 1);
})();
查看 jsfiddle 中的示例以了解我的意思 http://jsfiddle.net/dwh82zos/
【问题讨论】:
-
延迟以毫秒表示,但没有毫秒精度。更多地将其视为建议。您真的希望网页每秒运行 1000 次代码吗?真正的最小值可能约为 10-15 毫秒,具体取决于浏览器、操作系统等。
-
@Cameron 如果您正在处理动画帧并且您确实需要它如此准确,那将非常糟糕。
-
@symcbean.. 我认为这很清楚。我需要比较毫秒计时器和秒计时器中的秒数检测。我在问为什么它不能按预期工作!你有什么不明白的?!
-
@Husamuddin:你可以足够准确地measure time,只是你不能以精确的时间间隔调用你的回调。原生游戏也有完全相同的问题——例如,Win32 的睡眠分辨率只有 10-15 毫秒之内,而且总是有抖动,这取决于系统上运行的其他内容等。查看
requestAnimationFrame——浏览器为您管理回调间隔。
标签: javascript timer setinterval milliseconds seconds