为了账号安全,请及时绑定邮箱和手机立即绑定

定时器bug????

定时器bug????

后知后觉88 2017-04-04 11:30:12
<!DOCTYPE html><html><head>    <title>ss</title></head><body><script type="text/javascript">setInterval(function(){    var oDate=new Date()    console.log(oDate.getMinutes()+":"+oDate.getSeconds())},3000)</script></body></html>应该是浏览器bug,因为有的浏览器就没事,但是出现这种问题该怎么解决?求大神来帮忙.
查看完整描述

3 回答

已采纳
?
llwanghong

TA贡献7条经验 获得超9个赞

因为浏览器使用单线程来处理JS事件调度,setInterval创建的事件被放到事件队列里面,浏览器只是尽量按照指定的时间间隔去执行,如果在指定的时刻到来时,浏览器正在执行其它事件,则就无法立即执行该时刻指定的事件,只能推迟;但是下一次指定的时刻已经确定,所以会看到,有的间隔比指定的小;导致setInterval并不会按照预期的间隔来执行,从而就会有推荐使用setTimeout模拟setInterval的说法。

查看完整回答
2 反对 回复 2017-04-05
?
winner4265975

TA贡献19条经验 获得超17个赞

(function(){
    var oDate=new Date();
    var minutes=oDate.getMinutes()>9?oDate.getMinutes():"0"+oDate.getMinutes();
    var seconds=oDate.getSeconds()>9?oDate.getSeconds():"0"+oDate.getSeconds();
    console.log(minutes+":"+seconds)
    setTimeout(arguments.callee,3000)
})()

用setTimeout试试我在chrome下测试没问题!

查看完整回答
反对 回复 2017-04-04
?
自由的气息

TA贡献96条经验 获得超116个赞

我在chrome下正常,每隔3s弹出一下。

查看完整回答
反对 回复 2017-04-04
  • 3 回答
  • 1 关注
  • 1880 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信