美文网首页
setTimeout与setInterval

setTimeout与setInterval

作者: sarah_wqq | 来源:发表于2019-01-21 16:44 被阅读0次

一、setTimeout

1.原理

setTimeout(function(){
    /*do something*/
},N);

等待N秒后,往消息队列插入一条定时器事件消息,第一个参数作为回调函数;
而当执行栈内同步任务执行完毕时,线程从消息队列读取消息,将该异步任务入栈,执行;线程空闲时再次从消息队列读取消息。

2.时间不准确

  • 在读取消息队列的消息时,得等同步任务完成,这个是需要耗费时间的;
  • 消息队列先进先出原则,读取此异步事件消息之前,可能还存在其他消息,执行也需要耗时;

所以异步执行时间不精确是必然的,但是无论是同步任务还是异步任务,都不应该耗时太长,当一个消息耗时太长时,应该尽可能的将其分割成多个消息。

二、setInterval

1.原理

var timerID = setInterval(function(){
    /*do something*/
},N);

clearInterval(timerID);

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

三、同样的循环调用机制

setTimeout(function(){
    ...
    setTimeout(arguments.callee,10);
},10);

setInterval(function(){...},10);
  • 可使得setTimeout循环触发。但是,执行完这段代码块才挂起时间,所以两次执行时间会大于10ms
  • 是自动在10ms的时候挂上这个事件,所以两次事件的相隔会小于等于10ms
  • 清除 clearTimeout / clearInterval

相关文章

网友评论

      本文标题:setTimeout与setInterval

      本文链接:https://www.haomeiwen.com/subject/frncjqtx.html