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则不一定,可能会在过程中被丢弃某一次的执行。但是具体是经过多少时间才被执行的,两者都是不能预测的,因为会被其他不可预测的事件阻塞

  • 相关阅读:
    在python3中如何加载静态文件详版步骤
    django 过滤器总结
    通过虚拟环境创建并开始一个django
    关于django中模板的理解
    python 初学 正则表达式入门
    python 初学 错误类型以及编码规范
    获取地址的经纬度,根据经纬度反查地址
    mybatisz中一个可以替代between..and 的技巧
    linux指令和文件系统
    auto.js入门笔记
  • 原文地址:https://www.cnblogs.com/sparkmorry/p/3477296.html
Copyright © 2011-2022 走看看