先来一道常见的面试题: 应该不少同学都能答出来,结果为: 这个就涉及到JavaScript事件轮询中的宏任务和微任务。那么,你能说清楚到底宏任务和微任务是什么?是谁发起的?为什么微任务的执行要先于宏任务呢? 首先,我们需要先知道js运行机制。 js运行机制 ...
为什么要EventLoop JS 作为浏览器脚本语言,为了避免复杂的同步问题 例如用户操作事件以及操作DOM ,这就决定了被设计成单线程语言,而且也将会一直保持是单线程的。而在单线程中若是遇到了耗时的操作 IO,定时器,网络请求 将会一直等待,CPU利用率将会大打折扣,时间大量浪费。所以需要设计一种方案让一些耗时的操作放在一边等待,让后面的函数先执行,于是有了EventLoop的设计。 将任务分 ...
2021-03-31 18:50 0 493 推荐指数:
先来一道常见的面试题: 应该不少同学都能答出来,结果为: 这个就涉及到JavaScript事件轮询中的宏任务和微任务。那么,你能说清楚到底宏任务和微任务是什么?是谁发起的?为什么微任务的执行要先于宏任务呢? 首先,我们需要先知道js运行机制。 js运行机制 ...
宏任务包括:<script>整体代码、setTimeout、setInterval、setImmediate、Ajax、DOM事件微任务:process.nextTick、MutationObserver、Promise.then catch finally JS是单线程,碰见同步 ...
这篇借助于同事准备的技术分享,其他技术文章,书本知识,自己的理解梳理而成 高级程序设计第三版: js 是一门单线程的语言,运行于单线程的环境中,例如定时器等并不是线程,定时器仅仅只是计划代码在未来的某个时间执行,浏览器负责排序,指派某段代码在某个时间点运行 的优先级 1.为什么规定浏览器 ...
微任务 promise 、async await 微任务 遇到微任务,放在当前任务列的最底端(then或者catch里面的内容) 宏任务 setTimeout setInterval 宏任务 遇到宏任务,放到下一个新增任务列的最顶端 ...
如果你已经知道了js中存在宏任务和微任务,那么你一定已经了解过promise了。因为在js中promise是微任务的一个入口。 先来看一道题: 这题的答案是: promise body出现在第一行一点也不意外,意外的是,setTimeout出现在了promise then的后边 ...
.宏任务(macrotask )和微任务(microtask ) macrotask 和 microtask 表示异步任务的两种分类。 在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 macrotask 的队列(这个队列也被叫做 task queue)中取出第一个任务 ...
一、任务队列 弄清楚这个概念要先明白什么是任务: 一个任务就是指计划由标准机制来执行的任何 JavaScript,如程序的初始化、事件触发的回调等。 除了使用事件,你还可以使用 setTimeout() 或者 setInterval() 来添加任务。 所谓任务,浅显来说就是代码 ...
js 宏任务和微任务 .宏任务(macrotask )和微任务(microtask ) macrotask 和 microtask 表示异步任务的两种分类。 在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 macrotask 的队列 ...