# fed-e-task-01-01 **Repository Path**: mybmmm/fed-e-task-01-01 ## Basic Information - **Project Name**: fed-e-task-01-01 - **Description**: 阶段一-模块一 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fed-e-task-01-01 #### 一、谈谈你是如何理解js异步编程的,EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务? 1. ##### js异步编程的理解 javascript语言的执行环境是单线程的。当我们执行耗时较长的操作就应该异步执行,避免浏览器长时间没有响应。 异步模式是指javascript不等待耗时操作执行完毕,就开始执行后面的代码。常见的异步编程操作就是ajax。开发活动中常用的异步编程方式有回调函数、事件监听、发布/订阅以及Promise对象。 在开发过程中我们将代码放入调用栈中执行,如果是同步的则马上执行,异步的则放入消息队列中等待所有代码执行完毕后执行。所有代码执行完成后(当前调用栈无任务)主线程会从消息队列中去出回调函数压入到调用栈,继续执行直到循环结束。 2. ##### EventLoop、消息队列 EventLoop:即事件循环,主线程从消息队列中读取事件,这个过程是不断循环的,整个运行机制被称为EventLoop。 消息队列:暂时存放异步任务的地方被称为消息队列,代码运行过程中的异步操作会存在消息队列中,等到同步代码执行完毕之后,EnventLoop会从消息队列种依次取出异步任务放到调用栈中再次执行。 3. ##### 宏任务、微任务 宏任务:消息队列中的一个个任务,由Event Loop负责监听并触发调用。比如由setTimeout开启的定时器任务就是宏任务。由setTimeout开启的定时器任务就是宏任务。 微任务:宏任务执行完,在下一个宏任务开始之前需要执行的任务。Promise和MutationObserver及Node中的process.nextTick会生成微任务。