前端学习笔记(4) - JavaScript宏观与微观任务
宏观和微观任务
在 ES3 和更早的版本中,JavaScript 本身还没有异步执行代码的能力,这也就意味着,宿主环境传递给 JavaScript 引擎一段代码,引擎就把代码直接顺次执行了,这个任务也就是宿主发起的任务。
但是,在 ES5 之后,JavaScript 引入了 Promise,这样,不需要浏览器的安排,JavaScript 引擎本身也可以发起任务了。
由于我们这里主要讲 JavaScript 语言,那么采纳 JSC 引擎的术语,我们把宿主发起的任务称为宏观任务,把 JavaScript 引擎发起的任务称为微观任务。
宏观任务的队列就相当于事件循环。在宏观任务中,JavaScript 的 Promise 还会产生异步代码,JavaScript 必须保证这些异步代码在一个宏观任务中完成,因此,每个宏观任务中又包含了一个微观任务队列。
有了宏观任务和微观任务机制,我们就可以实现 JavaScript 引擎级和宿主级的任务了,例如:Promise 永远在队列尾部添加微观任务。setTimeout 等宿主 API,则会添加宏观任务。
如何分析异步执行的顺序
- 首先我们分析有多少个宏任务;
- 在每个宏任务中,分析有多少个微任务;
- 根据调用次序,确定宏任务中的微任务执行次序;
- 根据宏任务的触发规则和调用次序,确定宏任务的执行次序;
- 确定整个顺序。
setTimeout(()=>{console.log('c')},0) let x = new Promise((resolve,reject)=>{ console.log('a') resolve() }).then(res=>{ console.log('b') setTimeout(()=>{console.log('d')},0) })
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
我来告诉你,学 Python 为什么找不到工作
粗略的算一下,我玩票吹n*做自媒体这几年,也有十万多粉丝了。这其中数据分析和数据挖掘引流过来的占7成,Python 引流过来的占3成;我一个搞数据挖掘的,搞 java 的,偏偏是Python 的粉丝最多,为什么?因为Python火啊,各种渠道都告诉你们学 Python,年入30万,年入50万。我自己也算是 IT 圈的人,可能也认识一些所谓的大佬。我想告诉一些想学Python的朋友一个实际的情况是:用 Python 作为唯一编程语言找工作的,你连机会都没有,更不要说年薪多少了。 (一)正确的认知 Python 1.1 从 Python 的五大应用领域说,Python不是你要学,想学就能学 Python 应用的五大领域 (1)人工智能(AI 和 MI) (2)机器学习算法领域 (3)爬虫 (4)开发 (5)自动化测试 先说人工智能和机器学习算法,都是用 Python 来搞算法的,需要你有很强的数学功底。这是对学历和能力有极高要求的,不是你学个 Python 就可以弥补的。爬虫单不说用Python适不适合,也有所谓的 Python 爬虫工程师,就单说爬虫这工作来说,我都是不建议去做的,哪怕你...
- 下一篇
面向对象、工厂模式、构造函数、原型、原型链都不懂?看这一篇就够了!
本文是博主自己归纳曾学到的知识,以及分享工厂模式、构造函数、以及原型链之间的用途;有很多面试者都会遇到这些问题,但是一些小白来说,还是不清楚,这些知识点到底在技术中有什么用途,到底是干什么的?今天我就简单说一说,本篇博客会从基本开始介绍,如果你对今天的内容所致甚少,并且你有耐心看完,相信你会有超值的收获!!! 小白们都对原型链迷迷糊糊,经常查阅相关文章,却还是缕不清到底是干什么的。因为你不知道它到底有什么用,又是如何会用到它,所以在直接查阅原型链的时候,忽略了它之前很重要的知识,所以你不懂。这个很重要的知识,就是构造函数!!! 本篇博客要一环扣一环,决定帮大家捋清思路,所以我们从基本开始说,从头到尾请跟住博主的思路。 面向对象: 对象?无论在javascipt当中,还是java当中,或其他语言中,所提及的对象,绝对不是男女朋友的对象,所以我们凡人先忘掉感情视野,再体会一下这个词:“对象”。所谓对象,任何事物都可以称作是对象。比如: 医生给病人治疗,病人对于医生来说,就是治疗的对象。我们去商场购买苹果,苹果对于我们来说,就是要购买的对象。博主写的博客,你们就是我要展示博客的对象。科学家要...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS关闭SELinux安全模块
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度