转自:http://www.ruanyifeng.com/blog/2014/10/event-loop.html

五、定时器

除了放置异步任务的事件,"任务队列"还可以放置定时事件,即指定某些代码在多少时间之后执行。这叫做"定时器"(timer)功能,也就是定时执行的代码。

定时器功能主要由setTimeout()和setInterval()这两个函数来完成,它们的内部运行机制完全一样,区别在于前者指定的代码是一次性执行,后者则为反复执行。以下主要讨论setTimeout()。

setTimeout()接受两个参数,第一个是回调函数,第二个是推迟执行的毫秒数。


console.log(1); setTimeout(function(){console.log(2);},1000); console.log(3); 

上面代码的执行结果是1,3,2,因为setTimeout()将第二行推迟到1000毫秒之后执行。

如果将setTimeout()的第二个参数设为0,就表示当前代码执行完(执行栈清空)以后,立即执行(0毫秒间隔)指定的回调函数。


setTimeout(function(){console.log(1);}, 0); console.log(2); 

上面代码的执行结果总是2,1,因为只有在执行完第二行以后,系统才会去执行"任务队列"中的回调函数。

总之,setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行。它在"任务队列"的尾部添加一个事件,因此要等到同步任务和"任务队列"现有的事件都处理完,才会得到执行。

HTML5标准规定了setTimeout()的第二个参数的最小值(最短间隔),不得低于4毫秒,如果低于这个值,就会自动增加。在此之前,老版本的浏览器都将最短间隔设为10毫秒。另外,对于那些DOM的变动(尤其是涉及页面重新渲染的部分),通常不会立即执行,而是每16毫秒执行一次。这时使用requestAnimationFrame()的效果要好于setTimeout()。

需要注意的是,setTimeout()只是将事件插入了"任务队列",必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。要是当前代码耗时很长,有可能要等很久,所以并没有办法保证,回调函数一定会在setTimeout()指定的时间执行。

转载于:https://www.cnblogs.com/bonelee/p/6102018.html

JavaScript 运行机制详解:Event Loop——续相关推荐

  1. 我看朴灵评注阮一峰的《JavaScript 运行机制详解:再谈Event Loop》

    阮一峰和朴灵对我来说都是大牛,他们俩的书我都买过,阮老师的译作<软件随想录>和朴灵的<深入浅出node.js>.这个事情已经过了4个月了,所以我拿来讲应该也没啥问题. 这件事情 ...

  2. JavaScript 运行机制详解(理解同步、异步和事件循环)

    1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...

  3. JavaScript 运行机制详解:Event Loop

    转自: http://www.ruanyifeng.com/blog/2014/10/event-loop.html 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单 ...

  4. 【朴灵评注】JavaScript 运行机制详解:再谈Event Loop

    PS: 我先旁观下大师们的讨论,得多看书了~ 别人说的:"看了一下不觉得评注对到哪里去,只有吹毛求疵之感. 比如同步异步介绍,本来就无大错:比如node图里面的OS operation,推敲 ...

  5. JavaScript 运行机制详解:再谈Event Loop

    原文地址:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 一年前,我写了一篇<什么是 Event Loop?>,谈了我对Eve ...

  6. JavaScript 运行机制详解

    一:为什么JavaScript是单线程 JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事. 那么,为什么JavaScript不能有多个线程呢? 这样能提高效率! Java ...

  7. android系统(63)---Jobscheduler运行机制详解

    android之Jobscheduler运行机制详解 如果想在将来达到一定条件下执行某项任务时,可以在一个实现了JobService的子类的onStartJob方法中执行这项任务,使用JobInfo的 ...

  8. SSL / TLS 协议运行机制详解

    转载自  SSL / TLS 协议运行机制详解 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想 ...

  9. 【大数据day14】——MapReduce的运行机制详解(案列:Reduce 端实现 JOIN, Map端实现 JOIN,求共同好友)

    文章目录 1 .MapReduce的运行机制详解 1.1:MapTask 工作机制 详细步骤 配置 1.2 :ReduceTask 工作机制 详细步骤 1.3:Shuffle 过程 2. 案例: Re ...

最新文章

  1. Java序列化的机制和原理
  2. 关于举办第十五届全国大学生智能汽车竞赛浙江赛区选拔赛的通知(草案)
  3. oracle 数据库里查看表空间使用状况
  4. 安卓5.0以上设备最简单激活XPOSED框架的步骤
  5. 在datatable中,在指定位置插入列
  6. ElasticSearch suggester
  7. iOS 数据库操作(使用FMDB)
  8. python怎么把数据存在本地_将Python中的数据存储到系统本地的简单方法
  9. c语言计算圆周率的方法,c语言学习之不同方式计算圆周率
  10. easyPOI之动态导出word模板
  11. 基于BP神经网络的车牌识别问题研究附Matlab代码
  12. 大陆、港澳台身份证、护照、军官证的正则表达式
  13. 安卓wifi测速android,WiFi测速管家
  14. 移动互联网是“元宇宙”的1.0版
  15. Foxmail添加gmail账号
  16. Android进阶——巧借自定义VideoView实现Activity的动态视频背景
  17. GitHub使用指南(自用)
  18. LabVIEW应用程序在Windows版本之间的字体变化
  19. Android SearchView
  20. 免疫沉淀常见问题解答 | MedChemExpress

热门文章

  1. 《OpenSSL3.0学习之一 加密库简介|CSDN创作打卡》
  2. 电脑常见故障处理_关于密封仪、密封试验仪器在使用上的常见故障及维护方面...
  3. php ob flush 不管用,php ob_flush 不能每隔一秒输出
  4. win7计算机睡眠怎么设置方法,win7系统更改(设置)计算机睡眠时间的操作方法...
  5. C++条件编译:#ifdef
  6. 【深度学习】深入浅出神经网络框架的模型元件(池化、正则化和反卷积层)
  7. java-String StringBuffer
  8. 基础算法 —— 贪心算法
  9. 网站关键词如何布局更有利于关键词排名提升?
  10. 网络营销——网络营销专员表明网站地图助力网站收录进一步提升