js是单线程语言,而浏览器可以处理好众多的异步任务,靠的就是宏任务(macroTask)与微任务(microTask),这2种类型实际上都是异步任务
常见的宏任务 setTimeout setInterval setImmediate (node环境下是,而浏览器环境下不是) requestAnimationFrame (在浏览器环境是,而node环境不是) MessageChannel
常见微任务 promise.then MutationObserver process.nextTick
代码的执行顺序是 先执行同步任务,在执行异步任务,发现有微任务,先执行微任务,微任务清空之后,再去执行宏任务