# fed-e-part-module-1 **Repository Path**: igor-rub/fed-e-part-module-1 ## Basic Information - **Project Name**: fed-e-part-module-1 - **Description**: Part 1 · JavaScript 深度剖析 模块1的作业和笔记 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### Part 1 · JavaScript 深度剖析 模块1的作业和笔记 http://igor-rub.gitee.io/study/ gitee在线访问地址 code 文件夹存放代码 notes 文件夹存放笔记和思维导图 简答题答案: ### 一、谈谈你是如何理解 JS 异步编程的,EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务? JS 异步编程: 由于DOM的存在,js语言如果是多线程,如果存在同时操作同一个DOM的情况就没办法处理,除非引入锁的概念,但是会让语言更复杂,所以设计成了单线程的语言, 但是开发中,经常会碰到两个关联性不大的任务,同时执行的情况,这时候就要排队了,通过异步编程,让需要等待的任务先暂停等待结果,后面的任务继续执行,这样 就可以更高效的完成任务。暂时排队的任务就是异步任务 EventLoop: 一个系统的允许要有好的流程控制和规则,不然就像没有法律的国家,随便执行。EventLoop就是js中法律,控制每个任务的执行顺序和制定一些规则,让不同的任务在这个体系下面进行执行。 消息队列:存放异步任务的队列,排在EventLoop的最后执行,如果是微任务会在宏任务的前面执行。 里面的函数会产生一个调用栈,执行完毕就弹出。 宏任务: 是Node、浏览器发起的任务,每次执行完为一个队列 1. script 2. setTimeout/setInterval 3. UI rendering/UI事件 4. postMessage,MessageChannel 微任务: 由 JS引擎发起,可以进行“插队”到本次消息队列中 1. Promise 2. MutaionObserver 3. process.nextTick