zoukankan      html  css  js  c++  java
  • JavaScript 定时器工作原理

    定时器设定的延迟时间是没有保证的。因为所有在浏览器中执行的JavaScript单线程异步事件(比如鼠标点击事件和计时器)都只有在它有空的时候才会被执行。

    setTimeout 会在每次回调函数执行之后至少需要延时10ms再去执行一次(可能是更多,但是不会少)。但是setInterval会每隔10ms就去尝试执行一次回调函数,不管上一个回调函数是不是还在执行。

    • javascript引擎只有一个线程,迫使异步事件只能加入到队列去等待执行。
    • 在执行异步代码的时候,setTimeout 和setInterval 是有着本质区别的。
    • 如果计时器被正在执行的代码阻塞了,它将会进入队列的尾部去等待执行直到下一次可能执行的时间出现(可能超过它设定的延迟时间)。
    • 如果interval回调函数执行需要花很长时间的话(比指定的延时长),interval有可能没有延迟,背靠背地执行回调函数。

         

    var num = 12;
    console.log(num);
    setTimeout(function(){
    num++;
    console.log(num);
    },0);

    for(var i=0;i<1000000;i++){
    //code;
    }
    console.log(num);

    因为for循环的时间已经超过定时器的等待时间。所以定时器里面的回调函数,只能等到下面的的代码执行结束之后才开始执行。因为即使定时器延迟写0,它仍然会有默认延迟时间,每个浏览器的延迟时间不一样。

  • 相关阅读:
    【Android 开源项目】下拉刷新Android-PullToRefresh介绍
    【Android 分享】ShareSDK微信分享详解
    android面试经验谈
    Android面试过程描述
    浅谈Android客户端项目框架
    面试时如何谈自己做过的项目
    直接拿来用!最火的Android开源项目(一)
    Android开发项目经验
    dom解析xml
    Android学习之简单的拍照功能
  • 原文地址:https://www.cnblogs.com/huangl/p/4681363.html
Copyright © 2011-2022 走看看