【中高级前端面试题】谈谈事件循环(EventLoop)?宏任务微任务?

本文详细介绍了JavaScript的事件循环(Event Loop)机制,包括基础概念如进程、线程、单线程特性,以及同步任务和异步任务的区别。文章重点阐述了宏任务和微任务的执行流程,并通过代码执行流程图帮助理解。此外,还提及了面试中常见的相关问题,鼓励读者深入理解而不是死记硬背。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

前几天和朋友视频聊天,让他充当前端面试官模拟一下技术面试,他问了我几个很有意思的问题,基本上都是中高级前端技术面试中高频出现的问题,其中一个就是本文的题目。如果大家经常刷面试题肯定也看到过这个问题,今天我就把这个问题整理一下,希望可以帮助到大家能够深入理解事件循环。

javascript可以在node环境和浏览器环境下运行,大部分前端小伙伴接触浏览器环境更多一点,所以今天先介绍一下浏览器中js事件循环,node环境的等我随后花时间再整理一篇文章,欢迎关注。


一、弄清楚一些基础概念

1.什么是进程?

进程:是cpu分配资源的最小单位;(是能拥有资源和独立运行的最小单位)

2.什么是线程?

线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

3.什么是单线程?

在这里插入图片描述
截图自百度百科,单线程就是进程里只能有一个线程。众所周知js是单线程的,那大家有没有想过它为什么他是单线程的?

4. js为什么是单线程?浏览器呢?

js被设计为单线程其实是和他的用途有关,它的诞生主要是为了实现用户和浏览器之间的交互,以及操作dom,这种特殊的使命决定了它只能是单线程的模式,否则会带来很多问题。举个栗子:若js支持多线程,一个线程要改某个dom元素,另一个线程要删除同一个dom元素,浏览器该如何处理?

可能有些同学会问现在新版的html标准下webworker不就是多线程的吗?
虽然是多线程的,但是也是在主线程的控制下,且webworker仅仅能进行计算任务,不能操作DOM,其本质还是单线程的。关于webworker我会抽空再整理一篇文章分享给大家,这也是中高级前端需要了解掌握的知识点,欢迎大家关注。

浏览器是多进程的,浏览器每一个tab页都是一个独立的进程。

了解这些基础概念后,就可以接着进行了

二、同步任务和异步任务

我们了解到了JS是单线

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值