为什么javascript中的setInterval无法正常工作

时间:2013-10-11 00:11:30

标签: javascript

<html>
<head>
<script>

window.onload = function(){
    setTimeout(function(){

        alert("hi");    
    }, 4000);

    var time = 0;
    var para = document.getElementsByTagName("p");
    setInterval(function(){

        time += 1;

        para[0].innerHTML = time;

    },1);

}
</script>
</head>
<body>
<p></p>
</body>
</html>

这是我的代码,我想计算警报显示的时间,我希望它是4000,但它只在4秒后变成9xx。为什么会这样?

2 个答案:

答案 0 :(得分:3)

setInterval不是很精确。它唯一的保证是调用之间的时间大于或等于传递的间隔。在您的情况下,主要问题之一是最小间隔实际上指定为4毫秒。

您可以使用new Date().getTime()(或Date.now(),给定支持)获得完全准确的测量 - 这是以毫秒为单位,通常是您在做与测量时间有关的任何事情时应该使用的(甚至是大多数动画,只是因为它更简单)。

答案 1 :(得分:2)

为了扩展我在评论中所说的内容,这应该有效:

setTimeout(function(){
    alert("hi");    
}, 4000);

var startTime = new Date();
var para = document.getElementsByTagName("p");
setInterval(function(){
    var timeElapsed = new Date() - startTime;
    para[0].innerHTML = timeElapsed;
},1);

现在,即使你没有每毫秒进入,但是,比方说,每28毫秒,你的时间显示保持正确。