前端面试题(字节)

本文详细探讨了JavaScript中的事件循环机制,解释了为何JavaScript采用单线程和非阻塞模型,并介绍了宏任务和微任务的区别,以及它们在浏览器和Node.js中的执行顺序。内容包括事件循环的原因、宏任务与微任务类型、微任务引入的必要性以及Node.js与浏览器事件循环的差异。
摘要由CSDN通过智能技术生成

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队列(微任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值