# fed-e-task-01-01 **Repository Path**: benjenCode/fed-e-task-01-01 ## Basic Information - **Project Name**: fed-e-task-01-01 - **Description**: 课程作业代码库 - **Primary Language**: JavaScript - **License**: MulanPSL-1.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-30 - **Last Updated**: 2020-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fed-e-task-01-01 # 简答题 ## 一、谈谈你是如何理解JS异步编程的,EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务? 答: 1.异步指两个或两个以上的对象或事件不同时存在或发生。 异步编程的存在是为了解决js不能多线程操作的问题,可同时进行多任务的处理,不阻塞进程,一个任务结束后, 通过回调函数获取异步任务的状态后再进行相应的处理操作,异步编程使程序更高效,可以给用户带来更好的体验。 2.EventLoop 事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。 消息队列,JS在运行时包含了一个待处理消息的消息队列,每一个消息都关联着一个用以处理这个消息的回调函数, 运行时会先从最先进入队列的消息开始执行,被处理之后的消息会被移出消息队列,并作为输入参数来调用与之关联的函数。 3.宏任务及微任务, 每次执行栈的执行的代码过程可以理解为是一个宏任务(macroTask),宏观任务的队列就相当于事件循环。 宏任务执行会检查是否存在微任务(microTask),如果存在则不停的执行,直至清空microTask Queue。 微任务可以理解是当前宏任务执行结束后立即执行的任务。在当前task任务后,下一个task之前。也就是说在某一个macrotask执行完后, 就会将在它执行期间产生的所有microtask都执行完毕。 宏任务包含: script(整体代码) setTimeout setInterval I/O UI交互事件 postMessage MessageChannel setImmediate(Node.js环境) 微任务包含: Promise.then Object.observe MutaionObserver process.nextTick(Node.js环境)