事件循环的讲解, 不明白可以戳一戳, 看一看

微任务和宏任务的面试题

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. 为什么需要分微任务和宏任务?

因为任务队列有一个"先进先出"的数据结构, 排在前面的事件会被主线程优先的读取; 如果突然来了一个优先级更高的任务, 还要去排队等着执行, 那就不太现实了, 所以引入了微任务.
简答的来说微任务就是用来插队的, 它就是要比宏任务先执行. 也就是说微任务的优先级要高于宏任务, 所有的微任务执行完毕之后才会去执行宏任务.

 举个栗子: 医院排队交钱, 有一个人的家属要做手术; 急着交钱, 那还要人家慢慢排队等着交钱吗?


每次单个宏任务执行完毕后, 检查微任务队列是否为空, 如果不为空,会按照先入先出的规则全部执行完微任务后, 清空微任务队列, 然后再执行下一个宏任务,如此循环.

什么是任务,微任务和宏任务?相关推荐

  1. async js 返回值_图文讲解浏览器执行JS过程中的微任务和宏任务

    背景 我们知道浏览器有一个特定的事件执行机制,专业名词叫做Event Loop.如下图所示,浏览器会优先执行同步代码,遇到异步的代码时,会被挂起并在需要执行的时候加入到 Task(有多种 Task) ...

  2. 详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务

    队列在前端中的应用 一.队列是什么 二.应用场景 三.前端与队列:事件循环与任务队列 1.event loop 2.JS如何执行 3.event loop过程 4. DOM 事件和 event loo ...

  3. 【Day09】JavaScript 为什么要区分微任务和宏任务

    JavaScript 为什么要区分微任务和宏任务 区分微任务和宏任务是为了将异步队列任务划分优先级,通俗的理解就是为了插队. 一个 Event Loop,Microtask 是在 Macrotask ...

  4. JavaScript异步编程【上】 -- 同步和异步、事件循环(EventLoop)、微任务和宏任务、回调函数

    文章内容输出来源:拉勾教育 大前端高薪训练营 前言 在我们学习JavaScript中,我们知道,JavaScript的执行环境是单线程的.所谓单线程是指一次只能完成一个任务,如果有多个任务,就必须排队 ...

  5. ajax是宏任务还是微任务,(滴滴面试)事件循环Event Loop及微任务和宏任务的执行过程详解...

    之前一直在面试,对于一些大厂面试题真的还是很注重原理和基础的, 还有就是数据结构和算法这种,校招的话,这些是很重要的, 前天和滴滴的人面试,问的真心觉得不难,而且也都是现在面试前端很常见的问题, 对于 ...

  6. 微任务,宏任务,DOM渲染的执行顺序

    event loop过程 同步代码,一行一行放在Call Stack执行 遇到异步先记录下来,等待时机(定时,网络请求) 时机一到立马推入Callback Queue中 如Call Stack为空(同 ...

  7. 什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?

    文章目录 前言 一.那么宏任务和微任务是什么呢? 二.宏任务.微任务有哪些? 三.宏任务.微任务是怎么执行的? 四.案例 总结 前言 关于 Javascript 的执行顺序,众所周知是按照顺序自上而下 ...

  8. 同步任务和异步任务(微任务和宏任务)

    同步任务和异步任务(微任务和宏任务) JavaScript是一门单线程语言 分为同步任务和异步任务 同步任务是指在主线程上排队执行的任务, 只有前一个任务执行完毕,才能继续执行下一个任务. 异步任务指 ...

  9. Uber 团队放弃微服务改用宏服务,网友评论炸锅了

    作者 | highscalability 对于微服务,大多数开发者的态度都是鲜明的,要么热爱,要么痛恨,很少有人怀抱着比较"暧昧"的态度.所以,当 Uber 中的一个技术团队宣布, ...

最新文章

  1. 程序员别只顾着敲代码了,看看吧
  2. devops 成长路线
  3. 启动celery后执行任务报错:django.core.exceptions.ImproperlyConfigured
  4. 编程方法学20:图形用户界面
  5. .bam.bai的意义_业务活动监视器(BAM)2.0带来的革命
  6. linux下查看某软件是否已安装, ubuntu安装deb包
  7. word类型得实参和lpwstr类型的形参不兼容_前端测试题:(解析)关于JavaScript的数据类型,下面说法错误的是?...
  8. css中hack是什么
  9. Oracle USE_LARGE_PAGES初始化参数
  10. Atitit.阿里云c盘 系统盘爆满解决方案
  11. vc模拟 tabletpc_KB895953-TCServer.exe TabletPC崩溃/内存泄漏HotFix
  12. 网络存储 数据容灾 学习笔记4
  13. xp系统计算机怎么连接到网络打印机,xp打印机共享怎么设置(教你如何在电脑上连接XP系统的共享打印机)...
  14. OpenStack网络QoS
  15. 1.3 Go语言上手-高质量编程与性能调优实战
  16. pandas 公益学习 综合练习与学习总结
  17. html 图片自动滚动播放,CSS3如何实现图片滚动播放效果(附代码)_WEB前端开发...
  18. 什么是Galil(加利尔)运动控制卡,它是用来干嘛的呢?galil开发文件dmc32.dll,动态链接库,API
  19. 计算机没有音频驱动程序,电脑有驱动却没有高清晰音频管理器华硕主板应该装什么声卡驱动...
  20. 【Java课堂】接口详解

热门文章

  1. formdata格式传参
  2. 使用PIA查找组件的PeopleSoft导航
  3. 《计算机网络 自顶向下方法》笔记 第二章 应用层
  4. mybatis的一级缓存详解
  5. 分享63个投票调查PHP源码,总有一款适合你
  6. [Python]Python oop的私有制
  7. 为什么Java需要序列化
  8. 关于MySQL,你未必知道的!
  9. 三个月考研英语复习法
  10. Python学习工具必备——Anaconda+PyCharm新手安装教程