1.你了解浏览器的事件循环么?
1.1为什么js在浏览器中有事件循环的机制?
因为JS是单线程的。 单线程是必要的,也是javascript这门语言的基石,原因之一在其最初也是最主要的执行环境——浏览器中,JavaScript的主要用途是与用户互动,以及操作DOM。如果javascript是多线程的,那么当两个线程同时对dom进行一项操作,例如一个向其添加事件,而另一个删除了这个dom,此时该如何处理呢?因此,为了保证不发生类似于这个例子中的情景,javascript选择只用一个主线程来执行代码,这样就保证了程序执行的一致性。即使
H5提出了web worker标准,它有很多限制,受主线程控制,是主线程的子线程。
而javascript的另一个特点是“非阻塞”,就是靠event loop(事件循环)来实现的。
1.2你了解事件循环中的两种任务么?
宏任务: script(整体代码)、setTimeout、setInterval、node中的I/O操作、UI渲染等
微任务: new Promise().then(回调)中.then里的回调,MutaionObserver(前端的回溯,html5新特性)等
1.3为什么要引入微任务的概念,只有宏任务可以么?
宏任务 先进先出的原则执行。
⻚面渲染事件,各种IO的完成事件等随时被添加到任务队列中,一直会保持先进先出的原则执
行,我们不能准确地控制这些事件被添加到任务队列中的位置。但是这个时候突然有高优先级任务需要尽快执行,那么一种类型的任务就不合适了,所以引入了微任务队列。
1.4Node中的事件循环和浏览器中的时间循环有什么区别
微任务和宏任务在浏览器中的执行顺序:
执行一只task(宏任务)
执行完micro-task队列(微任