# fed-e-task-01-01 **Repository Path**: Minar/fed-e-task-01-01 ## Basic Information - **Project Name**: fed-e-task-01-01 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简答题 Q1:谈谈你是如何理解JS异步编程的,EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务? A:JS是单线程模型,一次只能执行一个任务。当执行一些耗时的任务时(网络请求等),如果要等待这些任务完成再执行下一个任务,就会造成**线程阻塞**。所以,JS把任务分成了**同步任务**和**异步任务**。同步任务需要等待任务执行完毕后再执行下一个任务,异步任务只发起一个任务的请求,并将这个任务放到**消息队列**中排队。待所有同步任务完成、线程空闲后,**事件循环**机制就会把消息队列的任务拿出来执行。在这些异步任务中,除了先后顺序,不同的任务类型的优先级也不一样。解析JS代码、定时器任务(setTimeout、setInterval)属于**宏任务**,Promise.then、MutationObserver属于**微任务**,在Node.js中,还有一个process.nextTick,它属于**高优先级微任务**。当JS文件加载之后,就已经开始了一个宏任务,用于从上到下执行代码。宏任务完成后,会执行全部的微任务,然后再执行下一个宏任务,再执行全部的微任务,以此类推。