js设计微任务,是为了解决宏任务的执行时机不可控的问题。如果只有宏任务,那任务队列里如果有一些紧急的任务,但是他前面还有别的耗时的回调的话,就比较麻烦。
有了微任务队列,因为主线程同步代码执行完毕以后,会优先执行微任务,所以如果比较紧急的任务,就放到微任务队列里就好了。如果你看过vue的文档,就会发现,vue在更新dom的时候就是异步的。如果侦听到数据变化,vue就会开启一个队列。vue在内部执行就是放到了微任务里,他会尝试使用Promise.then,MutationObserver,setImmediate,如果执行环境不支持,才会采用宏任务setTimeout(fn,0)代替。
浏览器是多线程的一个浏览器进程,是有多个线程的。比如,渲染引擎线程,js引擎线程,浏览器事件线程,