# fed-e-task-01-01 **Repository Path**: sryily1314/fed-e-task-01-01 ## Basic Information - **Project Name**: fed-e-task-01-01 - **Description**: 学习 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-12 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fed-e-task-01-01 #### 简答题 ##### 谈谈你是如何理解JS异步编程的EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务? Event Loop是javascript的执行机制事件循环 机制和 消息队列 的维护是由事件触发线程控制的。 事件触发线程 同样是浏览器渲染引擎提供的,它会维护一个 消息队列。 JS引擎线程遇到异步,会交给相应的线程单独去维护异步任务,等待某个时机,然后由事件触发线程将异步对应的回调函数加入到消息队列中,消息队列中的回调函数等待被执行。 同时,JS引擎线程会维护一个 执行栈,同步代码会依次加入执行栈然后执行,结束会退出执行栈。 如果执行栈里的任务执行完成,即执行栈为空的时候(即JS引擎线程空闲),事件触发线程才会从消息队列取出一个任务(即异步的回调函数)放入执行栈中执行。 消息队列是类似队列的数据结构,遵循先入先出(FIFO)的规则。 执行完了后,执行栈再次为空,事件触发线程会重复上一步操作,再取出一个消息队列中的任务,这种机制就被称为事件循环(event loop)机制。 宏任务:主代码块、setTimeout、setInterval等 微任务:Promise、process.nextTick等