JavaScript 运行机制详解:Event Loop——续
转自: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——续相关推荐
- 我看朴灵评注阮一峰的《JavaScript 运行机制详解:再谈Event Loop》
阮一峰和朴灵对我来说都是大牛,他们俩的书我都买过,阮老师的译作<软件随想录>和朴灵的<深入浅出node.js>.这个事情已经过了4个月了,所以我拿来讲应该也没啥问题. 这件事情 ...
- JavaScript 运行机制详解(理解同步、异步和事件循环)
1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...
- JavaScript 运行机制详解:Event Loop
转自: http://www.ruanyifeng.com/blog/2014/10/event-loop.html 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单 ...
- 【朴灵评注】JavaScript 运行机制详解:再谈Event Loop
PS: 我先旁观下大师们的讨论,得多看书了~ 别人说的:"看了一下不觉得评注对到哪里去,只有吹毛求疵之感. 比如同步异步介绍,本来就无大错:比如node图里面的OS operation,推敲 ...
- JavaScript 运行机制详解:再谈Event Loop
原文地址:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 一年前,我写了一篇<什么是 Event Loop?>,谈了我对Eve ...
- JavaScript 运行机制详解
一:为什么JavaScript是单线程 JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事. 那么,为什么JavaScript不能有多个线程呢? 这样能提高效率! Java ...
- android系统(63)---Jobscheduler运行机制详解
android之Jobscheduler运行机制详解 如果想在将来达到一定条件下执行某项任务时,可以在一个实现了JobService的子类的onStartJob方法中执行这项任务,使用JobInfo的 ...
- SSL / TLS 协议运行机制详解
转载自 SSL / TLS 协议运行机制详解 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想 ...
- 【大数据day14】——MapReduce的运行机制详解(案列:Reduce 端实现 JOIN, Map端实现 JOIN,求共同好友)
文章目录 1 .MapReduce的运行机制详解 1.1:MapTask 工作机制 详细步骤 配置 1.2 :ReduceTask 工作机制 详细步骤 1.3:Shuffle 过程 2. 案例: Re ...
最新文章
- Java序列化的机制和原理
- 关于举办第十五届全国大学生智能汽车竞赛浙江赛区选拔赛的通知(草案)
- oracle 数据库里查看表空间使用状况
- 安卓5.0以上设备最简单激活XPOSED框架的步骤
- 在datatable中,在指定位置插入列
- ElasticSearch suggester
- iOS 数据库操作(使用FMDB)
- python怎么把数据存在本地_将Python中的数据存储到系统本地的简单方法
- c语言计算圆周率的方法,c语言学习之不同方式计算圆周率
- easyPOI之动态导出word模板
- 基于BP神经网络的车牌识别问题研究附Matlab代码
- 大陆、港澳台身份证、护照、军官证的正则表达式
- 安卓wifi测速android,WiFi测速管家
- 移动互联网是“元宇宙”的1.0版
- Foxmail添加gmail账号
- Android进阶——巧借自定义VideoView实现Activity的动态视频背景
- GitHub使用指南(自用)
- LabVIEW应用程序在Windows版本之间的字体变化
- Android SearchView
- 免疫沉淀常见问题解答 | MedChemExpress
热门文章
- 《OpenSSL3.0学习之一 加密库简介|CSDN创作打卡》
- 电脑常见故障处理_关于密封仪、密封试验仪器在使用上的常见故障及维护方面...
- php ob flush 不管用,php ob_flush 不能每隔一秒输出
- win7计算机睡眠怎么设置方法,win7系统更改(设置)计算机睡眠时间的操作方法...
- C++条件编译:#ifdef
- 【深度学习】深入浅出神经网络框架的模型元件(池化、正则化和反卷积层)
- java-String StringBuffer
- 基础算法 —— 贪心算法
- 网站关键词如何布局更有利于关键词排名提升?
- 网络营销——网络营销专员表明网站地图助力网站收录进一步提升