# fed-e-task-01-01 **Repository Path**: zhangxiaofeng66/fed-e-task-01-01 ## Basic Information - **Project Name**: fed-e-task-01-01 - **Description**: No description available - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-21 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 一、谈谈你是如何理解JS异步编程的、EveentLoop、消息队列都是做什么的,什么是宏任务,什么是微任务? 由于js是单线程的,只能在js引擎的主线程中执行,js代码只能一行一行的执行,不能在同时间执行多个任务,如果有一个任务比较耗时,如果没有异步任务的话,这就需要用户等待很长时间,并且由于当前任务没有执行完毕,后期其他操作也都会无响应,这就需要js的异步编程。 那么js是怎么实现异步编程的? 常见的异步模式有:回调函数、事件监听、promise、发布/订阅模式 js的异步编程就是js的事件循环机制(EventLoop),当js的同步任务执行完成以后,就会去消息队列里查看是否还有任务存在,如果存在,则将任务放到执行栈中去执行,执行完成以后继续去消息队列查看是否还存在任务。 消息队列里又分为宏任务和微任务: 宏任务:比如setTimeout、setInterval等, 微任务:Promise的then 当EventLoop执行到setTimeout放到宏任务中,然后查看是否存在微任务,如果存在,执行微任务,微任务执行完毕,继续开始下一个宏任务。