zoukankan      html  css  js  c++  java
  • 关于js中的setTimeout和setInterval

    http://ejohn.org/blog/how-javascript-timers-work

    这是John的一篇博文说到setTimeout和setInterval的区别,在看js高效图形编程的时候文中提到的。

    首先很明显的是:

    1. setTimeout是定时触发,在一定的延时后只触发一次,但是可以利用回调一个setTimeout来实现循环触发,比如:

    setTimeout(function(){
        /* Some long block of code... */
        setTimeout(arguments.callee, 10);
      }, 10);

    而setInterval本身即表示循环触发,直到被取消为止(clearInterval(id);)。

    2.JS是单线程的,每一个异步操作被触发时,如果当前正好有其他事件或者函数正在被执行,比如(用户突然点击了鼠标触发了某个onclick事件,我们是不能预测的),那个异步操作就会被压入queue队列中等到当前事件被执行之后再调用。

    3.setTimeout被初始化之后被触发时一定会被压到队列中,等待被执行,而setInterval如果被触发时,发现先前有一个interval块再队列中没有被执行,那么他就会丢弃当前这个被触发的interval块,而不将其压入队列中。

    这张图片诠释的非常好!可以看到红字的dropped是因为之前的一个interval还没有被执行,所以这个interval就不会被压到队列中。 

    所以setTimeout被调用的函数是可以预测一定会被执行的,setInterval则不一定,可能会在过程中被丢弃某一次的执行。但是具体是经过多少时间才被执行的,两者都是不能预测的,因为会被其他不可预测的事件阻塞

  • 相关阅读:
    flex布局以及相关属性
    css 选择器
    两侧定宽,中栏自适应布局
    两列定宽,一列自适应布局
    左列定宽,右列自适应布局
    Flex接收51单片机发送过来的16进制数据转换为String
    Flex与51单片机socket通信 策略问题
    sql For XML Path
    sql多对多探讨
    JavaScript
  • 原文地址:https://www.cnblogs.com/sparkmorry/p/3477296.html
Copyright © 2011-2022 走看看