什么是任务,微任务和宏任务?
事件循环的讲解, 不明白可以戳一戳, 看一看
微任务和宏任务的面试题
1. 什么是任务?
众所周知, JavaScript是单线程的; 一个任务就是一个线程(ajax请求, 用户触发的事件都可以称之为任务), 但是不是每一个任务都是按顺序执行的,如: 定时器, 网络延迟请求就不会顺序执行.
那么当浏览器遇到了定时器和网络延迟请求这样的任务的时候, 一直去等待它们执行完毕的话. 可能会导致页面的崩溃.
那么这是就出现了同步任务和异步任务.
2. 什么是同步任务?
立即执行的任务,在主线程上排队执行,前一个任务执行完毕,才能执行后一个任务.简答的来说就是代码的书写顺序, 和它的执行顺序是一致的; 那么就是同步任务.
3. 什么是异步任务?
异步执行的任务,不进入主线程, 而是在异步任务有了结果后,将注册的回调函数放入任务队列中等待主线程空闲的时候读取执行.比如: ajax, setTimeout, setInterval, Promise.then和事件回调等等.
注意: 浏览器并不是遇到了异步任务就把其放入任务队列里面, 而是触发了才会把回调函数放入任务队列等待主线程读取.
在异步任务中又细分为微任务(MacroTask)和宏任务(MicroTask).
4. 为什么有同步和异步任务之分?
可以想一想, 如果所有的任务都是同步的任务; 那我发送一个ajax请求数据, 要是网速很慢, 下面的加载就都做不了. 只能够死等着服务器响应结束, 后面的代码才会去执行; 那么页面就很乱了.
5. 什么是微任务(Macro Task)?
一般由ECMA规定的东西就是微任务, 如: promise.then/.catch/.finally.
6. 什么是宏任务(MicroTask)?
由宿主环境规定的一般都是宏任务, 如: 定时器, ajax, 事件回调, script标签.
7. 为什么需要分微任务和宏任务?
因为任务队列有一个"先进先出"的数据结构, 排在前面的事件会被主线程优先的读取; 如果突然来了一个优先级更高的任务, 还要去排队等着执行, 那就不太现实了, 所以引入了微任务.
简答的来说微任务就是用来插队的, 它就是要比宏任务先执行. 也就是说微任务的优先级要高于宏任务, 所有的微任务执行完毕之后才会去执行宏任务.
举个栗子: 医院排队交钱, 有一个人的家属要做手术; 急着交钱, 那还要人家慢慢排队等着交钱吗?
每次单个宏任务执行完毕后, 检查微任务队列是否为空, 如果不为空,会按照先入先出的规则全部执行完微任务后, 清空微任务队列, 然后再执行下一个宏任务,如此循环.
什么是任务,微任务和宏任务?相关推荐
- async js 返回值_图文讲解浏览器执行JS过程中的微任务和宏任务
背景 我们知道浏览器有一个特定的事件执行机制,专业名词叫做Event Loop.如下图所示,浏览器会优先执行同步代码,遇到异步的代码时,会被挂起并在需要执行的时候加入到 Task(有多种 Task) ...
- 详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
队列在前端中的应用 一.队列是什么 二.应用场景 三.前端与队列:事件循环与任务队列 1.event loop 2.JS如何执行 3.event loop过程 4. DOM 事件和 event loo ...
- 【Day09】JavaScript 为什么要区分微任务和宏任务
JavaScript 为什么要区分微任务和宏任务 区分微任务和宏任务是为了将异步队列任务划分优先级,通俗的理解就是为了插队. 一个 Event Loop,Microtask 是在 Macrotask ...
- JavaScript异步编程【上】 -- 同步和异步、事件循环(EventLoop)、微任务和宏任务、回调函数
文章内容输出来源:拉勾教育 大前端高薪训练营 前言 在我们学习JavaScript中,我们知道,JavaScript的执行环境是单线程的.所谓单线程是指一次只能完成一个任务,如果有多个任务,就必须排队 ...
- ajax是宏任务还是微任务,(滴滴面试)事件循环Event Loop及微任务和宏任务的执行过程详解...
之前一直在面试,对于一些大厂面试题真的还是很注重原理和基础的, 还有就是数据结构和算法这种,校招的话,这些是很重要的, 前天和滴滴的人面试,问的真心觉得不难,而且也都是现在面试前端很常见的问题, 对于 ...
- 微任务,宏任务,DOM渲染的执行顺序
event loop过程 同步代码,一行一行放在Call Stack执行 遇到异步先记录下来,等待时机(定时,网络请求) 时机一到立马推入Callback Queue中 如Call Stack为空(同 ...
- 什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?
文章目录 前言 一.那么宏任务和微任务是什么呢? 二.宏任务.微任务有哪些? 三.宏任务.微任务是怎么执行的? 四.案例 总结 前言 关于 Javascript 的执行顺序,众所周知是按照顺序自上而下 ...
- 同步任务和异步任务(微任务和宏任务)
同步任务和异步任务(微任务和宏任务) JavaScript是一门单线程语言 分为同步任务和异步任务 同步任务是指在主线程上排队执行的任务, 只有前一个任务执行完毕,才能继续执行下一个任务. 异步任务指 ...
- Uber 团队放弃微服务改用宏服务,网友评论炸锅了
作者 | highscalability 对于微服务,大多数开发者的态度都是鲜明的,要么热爱,要么痛恨,很少有人怀抱着比较"暧昧"的态度.所以,当 Uber 中的一个技术团队宣布, ...
最新文章
- 程序员别只顾着敲代码了,看看吧
- devops 成长路线
- 启动celery后执行任务报错:django.core.exceptions.ImproperlyConfigured
- 编程方法学20:图形用户界面
- .bam.bai的意义_业务活动监视器(BAM)2.0带来的革命
- linux下查看某软件是否已安装, ubuntu安装deb包
- word类型得实参和lpwstr类型的形参不兼容_前端测试题:(解析)关于JavaScript的数据类型,下面说法错误的是?...
- css中hack是什么
- Oracle USE_LARGE_PAGES初始化参数
- Atitit.阿里云c盘 系统盘爆满解决方案
- vc模拟 tabletpc_KB895953-TCServer.exe TabletPC崩溃/内存泄漏HotFix
- 网络存储 数据容灾 学习笔记4
- xp系统计算机怎么连接到网络打印机,xp打印机共享怎么设置(教你如何在电脑上连接XP系统的共享打印机)...
- OpenStack网络QoS
- 1.3 Go语言上手-高质量编程与性能调优实战
- pandas 公益学习 综合练习与学习总结
- html 图片自动滚动播放,CSS3如何实现图片滚动播放效果(附代码)_WEB前端开发...
- 什么是Galil(加利尔)运动控制卡,它是用来干嘛的呢?galil开发文件dmc32.dll,动态链接库,API
- 计算机没有音频驱动程序,电脑有驱动却没有高清晰音频管理器华硕主板应该装什么声卡驱动...
- 【Java课堂】接口详解