扫码关注公众号

前端考点之 js事件循环机制
12-05
25观看
01

什么是事件循环?

事件循环(eventLoop)是单线程的JavaScript在处理异步事件时进行的一种循环过程,具体来讲,对于异步事件它会先加入到事件队列中挂起,等主线程空闲时会去执行事件队列中的事件。

来自:JavaScript语言-js事件循环机制
02

请描述事件循环Event Loop执行机制

主线程任务——>微任务——>宏任务如果宏任务里还有微任务就继续执行宏任务里的微任务,如果宏任务中的微任务中还有宏任务就在依次进行主线程任务——>微任务——>宏任务——>宏任务里的微任务——>宏任务里的微任务中的宏任务——>直到任务全部完成我的理解是在同级下,微任务要优先于宏任务执行同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入EventTable并注册函数。当指定的事情完成时,EventTable会将这个函数移入EventQueue。主线程内的任务执行完毕为空,会去EventQueue读取对应的函数,进入主线程执行。上述过程会不断重复,也就是常说的EventLoop(事件循环)

来自:JavaScript语言-js事件循环机制
03

任务队列又分为宏任务与微任务,分别包括什么?

浏览器的事件循环分为同步任务和异步任务;所有同步任务都在主线程上执行,形成一个函数调用栈(执行栈),而异步则先放到任务队列(taskqueue)里,任务队列又分为宏任务(macro-task)与微任务(micro-task)。下面的整个执行过程就是事件循环宏任务大概包括:script(整块代码)、setTimeout、setInterval、I/O、UI交互事件、setImmediate(node环境)微任务大概包括:newpromise().then(回调)、MutationObserver(html5新特新)、Object.observe(已废弃)、process.nextTick(node环境)若同时存在promise和nextTick,则先执行nextTick

来自:JavaScript语言-js事件循环机制
04

对js事件循环机制,以下代码输出是什么?

先执行宏任务(当前代码块也算是宏任务),然后执行当前宏任务产生的微任务,然后接着执行宏任务1从上往下执行代码,先执行同步代码,输出scriptstart2遇到setTimeout,现把setTimeout的代码放到宏任务队列中3执行async1(),输出async1start,然后执行async2(),输出async2,把async2()后面的代码console.log('async1end')放到微任务队列中4接着往下执行,输出promise1,把.then()放到微任务队列中;注意Promise本身是同步的立即执行函数,.then是异步执行函数5接着往下执行,输出scriptend。同步代码(同时也是宏任务)执行完成,接下来开始执行刚才放到微任务中的代码6依次执行微任务中的代码,依次输出async1end、promise2,微任务中的代码执行完成后,开始执行宏任务中的代码,输出setTimeout最后的执行结果如下scriptstartasync1startasync2promise1scriptendasync1endpromise2setTimeout

来自:JavaScript语言-js事件循环机制
课程
专栏
【校招VIP】带你了解事件循环机制(Event Loop)
csdn
事件循环机制
【校招VIP】js事件循环机制及面试题详解
csdn
事件循环机制
面试题
【校招VIP】高频面试题:JavaScript事件循环机制解析
JavaScript是单线程,非阻塞的
简书
Javascript
事件循环机制
js语言和框架-JavaScript语言-js事件循环机制
3专栏
1课程
4 试题