美文网首页
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