js定时器的准确时间?

JavaScript032

js定时器的准确时间?,第1张

js定时器的准确时间

这个相差是不确定的。

因为虽说1000毫秒是1秒,但是js是单线程的,又怎么会有一个线程单独来计算时间呢,那么问题来了。

js是如何定时的?

其实js的setTimeout机制是这样的,每个语句都会加入到执行的队列中,也就是挂起状态,其实是一直往执行队列里面加你写的语句上一句其他代码,或者setTimeout的回调函数里面的代码,执行完了,再次执行已经挂起的setTimeout,那么此时执行时间与电脑配置和js执行效率有关。

所以结论就是,电脑速度越快,js代码效率越高,这个延迟就越小。

但是,一定会有一定的延迟的,因为js是单线程的

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

</head>

<body>

<button type="button" id="cancel">取消定时器</button>

<script>

let time = setInterval(()=>{

console.log('当前时间是:'+timer())

},1000)

function timer(){

let date = new Date()

let hour = date.getHours().toString().padStart(2,"0")

let min = date.getMinutes().toString().padStart(2,"0")

let sec = date.getSeconds().toString().padStart(2,"0")

return `${hour}:${min}:${sec}`

}

document.getElementById('cancel').onclick = function(){

clearInterval(time)

alert('已取消定时器')

}

</script>

</body>

</html>