文章目录
前言
前几天和朋友视频聊天,让他充当前端面试官模拟一下技术面试,他问了我几个很有意思的问题,基本上都是中高级前端技术面试中高频出现的问题,其中一个就是本文的题目。如果大家经常刷面试题肯定也看到过这个问题,今天我就把这个问题整理一下,希望可以帮助到大家能够深入理解事件循环。
javascript可以在node环境和浏览器环境下运行,大部分前端小伙伴接触浏览器环境更多一点,所以今天先介绍一下浏览器中js事件循环,node环境的等我随后花时间再整理一篇文章,欢迎关注。
一、弄清楚一些基础概念
1.什么是进程?
进程:是cpu分配资源的最小单位;(是能拥有资源和独立运行的最小单位)
2.什么是线程?
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
3.什么是单线程?
截图自百度百科,单线程就是进程里只能有一个线程。众所周知js是单线程的,那大家有没有想过它为什么他是单线程的?
4. js为什么是单线程?浏览器呢?
js被设计为单线程其实是和他的用途有关,它的诞生主要是为了实现用户和浏览器之间的交互,以及操作dom,这种特殊的使命决定了它只能是单线程的模式,否则会带来很多问题。举个栗子:若js支持多线程,一个线程要改某个dom元素,另一个线程要删除同一个dom元素,浏览器该如何处理?
可能有些同学会问现在新版的html标准下webworker不就是多线程的吗?
虽然是多线程的,但是也是在主线程的控制下,且webworker仅仅能进行计算任务,不能操作DOM,其本质还是单线程的。关于webworker我会抽空再整理一篇文章分享给大家,这也是中高级前端需要了解掌握的知识点,欢迎大家关注。
浏览器是多进程的,浏览器每一个tab页都是一个独立的进程。
了解这些基础概念后,就可以接着进行了
二、同步任务和异步任务
我们了解到了JS是单线