首页 > 试题广场 >

说一说事件循环Event loop,宏任务与微任务?

[问答题]
说一说事件循环Event loop,宏任务与微任务?
浏览器的事件循环:执行js代码的时候,遇见同步任务,直接推入调用栈中执行,遇到异步任务,将任务挂起,等到异步任务有返回之后推入到任务队列中,当调用栈中所以同步任务全部执行完成,将任务队列中的任务按顺序一个一个推入并执行,重复执行这一系列的行为。异步任务又分为宏任务和微任务。宏任务;任务队列中的任务称为宏任务,每个宏任务都包含了一个微任务队列。微任务:等宏任务中的主要功能都完成后,渲染引擎不急着去执行下一个宏任务,而是执行当前宏任务中的微任务。宏任务包含script标签的内部代码、setTimeout/setInterval,ajax请求、post Message,MessageChannel,setlmmediate,I/O(Node.js);微任务包含:Promise,MutonObserver,Object.observe,process.nextTick(Node.js).
发表于 2022-07-16 14:37:20 回复(0)
Proxy劫持整个对象,返回新对象
编辑于 2022-06-22 13:24:43 回复(0)
js是单线程的,主线程在执行时会不断循环往复的从同步队列中读取任务,执行任务,当同步队列执行完毕后再从异步队列中依次执行。宏任务与微任务都属于异步任务,再执行上微任务的优先级高于宏任务,因此每一次都会先执行完微任务在执行宏任务。宏任务有定时器,Dom事件,ajax事件,微任务有:promise的回调、MutationObserver 的回调 ,process.nextTick
发表于 2022-04-26 13:13:15 回复(1)
1. 事件循环概念:js为单线程, 执行同步任务时候,直接推入调用栈中执行,遇见异步任务时,先将异步任务挂起,直到异步任务有返回再推入执行队列中,当调用栈中 同步任务执行完毕后,调用栈从执行队列中获取异步任务执行,这个循环过程叫做事件循环eventLoops 2. 宏任务和微任务是对同步任务和异步任务的更细致划分 js执行时,会先执行宏任务,再执行宏任务下所有的微任务,之后在开启下一次的宏任务执行 宏任务包括 script代码,setTimeout,setInterval, 微任务包括据 promise process.nextTick 详情请看:https://juejin.cn/post/6844903512845860872 3. 个人观点:一方面认为js任务分为同步任务和异步任务,异步任务再划分为宏任务和微任务;另一方面认为宏任务和微任务是同步任务和异步任务更详细的划分,我更 倾向于后者,在mdn中讲到,事件循环是先执行的宏任务再执行的微任务 详情:https://developer.mozilla.org/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide/In_depth
发表于 2022-07-24 17:33:48 回复(0)
在JS单线程的特性下,出现同步异步代码区分,异步代码就显得很难处理(若也是主调用栈顺序执行则会长期占据执行权),因此出现Event Loop机制。将异步代码进行种类划分(宏任务和微任务),并先执行同步代码,执行完后查询微任务队列,执行清空该队列全部任务,再执行一个宏任务(将执行过程中遇到的微任务收集起来),再清空微任务队列。(以此类推)直到所有任务执行完毕。 补充:微任务:promise、process.nextTick、async/await 。 宏任务:定时器、ajax、操作DOM、requestAnimationFrame
发表于 2022-04-30 13:58:41 回复(0)
js是单线程的,主线程在执行时会不断循环往复的从同步队列中读取任务,执行任务,当同步队列执行完毕后再从异步队列中依次执行。宏任务与微任务都属于异步任务,再执行上微任务的优先级高于宏任务,因此每一次都会先执行完微任务在执行宏任务。宏任务有定时器,Dom事件,ajax事件,微任务有:promise的回调、MutationObserver 的回调 ,process.nextTick
发表于 2022-06-06 22:46:51 回复(0)
eventloop,首先执行同步任务,并把同步任务里的异步任务放入队列中,当执行完同步任务后会执行队列中的异步任务,异步任务分为宏任务和微任务,首先执行宏任务,把宏任务里的微任务放入队列中,然后执行微任务,
发表于 2022-09-16 11:59:15 回复(0)
Vue 在更新Dom时是异步执行的,在修改数据后,视图不会立即更新,而是在同一个事件循环中所有数据变化完成后,进行统一的视图更新。因此在数据修改后立即访问DOM仍是未修改的DOM。而¥nextTick的作用会在渲染之后执行,本质是返回了一个promise对象。
编辑于 2022-10-15 23:38:04 回复(0)
js引擎在执行代码的时候,是从上到下依次来执行的,在这个过程中,如果遇到异步请求,会交给其他的线程去执行,当需要执行其他线程中的代码时,就会去事件队列中加入要执行的任务,当js引擎执行完同步代码后,js引擎就会从事件队列中取出要执行的代码,进行执行,这就是事件循环。 ### 微任务和宏任务 - 事件队列中维护这两个队列 - 宏任务队列: 定时器,Ajax,Dom监听等 - 微任务队列: Promise的then回调,queueMicrotask()等 - 那么这两个执行队列的顺序是怎样的? - 1、mainscript先执行 - 2、当执行每一个宏任务时,都要看看微任务队列是否为空,只有微任务队列为空,才可以执行 - 如果微任务队列不为空,就要先执行微任务
发表于 2022-06-18 17:22:28 回复(1)
js是单线程的,会循环往复的先执行同步任务,当同步任务执行完毕后去执行异步队列中的异步任务,事件循环中是执行栈中的内容,栈中内容执行后执行微任务,微任务清空后执行宏任务,所以微任务的优先级高于宏任务。js中常见的微任务:promise.then,MutationObserver,process.nextTick;宏任务:setTimeout、setInterval定时器、DOM事件、AJSX事件
发表于 2022-05-23 09:57:35 回复(0)
当遇到同步任务的时候,js会将同步任务推入到执行栈中依次执行;如果遇到异步任务,会将该任务挂起,继续执行后面的任务,当异步任务有返回结果的时候将它推入到任务队列-Event Queue中,当执行栈中的同步任务全部执行完成之后,js会再去查看任务队列中是否有任务,如果有的话,会取出第一个任务,并把这个任务的回调放到执行栈中执行,再执行他的同步任务,直到任务队列中的任务执行完成,如此反复,就形成了一个事件循环。而异步任务中又分为宏任务和微任务,宏任务包括setTimeOut,setInterval,微任务包括promise,asyc await等,宏任务:任务队列中的任务称为宏任务,每个宏任务又包含了一个微任务,当宏任务的主要功能执行完之后,会执行当前宏任务中的微任务。
发表于 2023-02-09 11:49:47 回复(0)
事件循环:浏览器会在遍历所有的任务,如果是同步任务按顺序执行,如果是异步任务,等所有同步任务执行完成后执行异步任务,,异步任务分为宏任务和微任务,一般来说浏览器是先执行微任务,但事实script是一个特殊的宏任务,所以浏览器会限制性格宏任务在执行微任务,最后执行宏任务。
发表于 2024-04-24 14:43:55 回复(0)
1.JS是单线程,防止代码阻塞,我们把代码(任务):同步和异步 2.同步代码给js引擎执行,异步代码交给宿主环境 3.同步代码放入执行栈中,异步代码等待时机成熟送入任务队列排队 4.执行栈执行完毕,会去任务队列看是否有异步任务,有就送到执行栈执行,反复循环查看执行,这个过程是事件循环(eventloop) Event Loop 执行顺序如下所示: 首先执行同步代码,这属于宏任务 当执行完所有同步代码后,执行栈为空,查询是否有异步代码需要执行 执行所有微任务 当执行完所有微任务后,如有必要会渲染页面 然后开始下一轮 Event Loop,执行宏任务中的异步代码 7. 宏任务和微任务分别有哪些 微任务包括: promise 的回调、node 中的 process.nextTick 、对 Dom 变化监听的 MutationObserver。 宏任务包括: script 脚本的执行、setTimeout ,setInterval ,setImmediate 一类的定时事件,还有如 I/O 操作、UI 渲染等。
编辑于 2024-03-23 13:50:26 回复(0)
js是单线程的,在执行js代码时,遇见同步任务直接放入执行栈中,遇见异步任务不会等它返回结果,先将它挂起,挂起的异步任务的回调放在一个队列,队列又分为微任务和宏任务,等执行栈中的同步任务执行完,再去读取任务队列里的异步回调,首先读取微任务,微任务执行完再读取宏任务,从任务队列读取事件的这一过程是循环不断的,又叫事件循环
编辑于 2024-03-21 17:07:06 回复(0)
首先js是单线程执行的,但不代表会阻塞代码执行,在js中,所有的任务都可以分为同步任务和异步任务,同步的任务一般都会进入主线程执行,异步的任务会进入任务队列,在同步任务执行为空时,会开始执行异步任务。而异步任务还分为更细的宏任务和微任务,事件循环就是在宏任务和微任务之间循环,每当宏任务执行完之后,会在微任务队列中执行微任务,当微任务执行完会接着执行宏任务。
编辑于 2024-03-05 15:52:31 回复(0)
浏览器执行js任务时 会先执行同步代码的任务,当遇到异步代码时,浏览器会把异步代码放到任务队列中,等待同步任务执行完成,在从任务队列中放到主进程执行,异步任务有分为微任务和宏任务,优先执行微任务,遇到宏任务会把宏任务放到宏任务队列,执行完微任务,在取出宏任务执行,如果遇到微任务,先知行微任务,完成在次执行宏任务 这样来回循环执行就形成了事件循环
编辑于 2024-03-02 10:52:59 回复(0)
浏览器的事件循环:执行js代码的时候,遇到同步任务,直接进入栈中执行,遇到异步任务,将该任务挂起,等到异步任务有返回后推入到任务队列中,当栈中的所有同步任务全部执行完成,将任务队列中的任务按顺序一个一个的推入并执行。异步任务又分为宏任务和微任务
编辑于 2024-02-22 11:16:34 回复(0)
1.事件循环:由于JS是单线程的,所有任务都需要排队执行,事件循环就是这个排队执行任务的过程,先执行同步任务,再执行异步任务,异步任务分为宏任务和微任务,先执行微任务 2.宏任务:setTimeout、setInterval 3.微任务:promise的回调,MutationObserver 的回调,node的process.nextTick
发表于 2023-10-10 18:06:56 回复(0)
执行Js代码的时候,如果遇到同步任务,则直接堆入调用栈中执行,如果遇到异步任务,则先挂起,等到异步任务有返回后堆入任务队列中。当所有的同步任务执行完成后,将任务队列中的任务按顺序一个个推入并执行。在执行的时候会先执行宏任务下所有的微任务,再执行下一个宏任务。宏任务包括定时器,ajax事件,dom操作,微任务包括promise,process.nextTick,mutationObserve
发表于 2023-09-17 21:56:27 回复(0)
js是单线程任务,先执行完同步任务,再执行异步任务,而异步任务分为宏任务和微任务,微任务优先级高于宏任务,微任务有 如promise等,宏任务如定时器,ajax请求等
发表于 2023-09-14 11:00:06 回复(0)