浏览器模型主要分为几个部分:User Interface用户界面、Browser engine浏览器引擎、Rendering engine渲染引擎(呈现引擎)等。
前端中提到的事件环,一般指:浏览器的eventLoop,另外还有一个是node中的事件环。浏览器是多进程的,js中它的主线程是单线程的,意思是同一时间,要么是渲染js,要么是渲染css,js和css是共用同一个线程渲染的,一般是先渲染js,等空闲下来再渲染css。代码中栈中执行,栈是先进后出,可以思考函数的调用栈,one调用了two,two调用了three,销毁的时候是three先销毁。对于异步执行的事件,异步回调或者异步事件得到结果后,会放到一个队列,当主栈中的功能都执行完后,会从队列中的第一个开始执行。
浏览器的事件环机制中异步方法也会再分类:1)宏任务、2)微任务。比如:setTimeout就是宏任务,Promise.then就是微任务。微任务会在宏任务之前执行。异步队列一般是2个队列:微任务队列,宏任务队列。当代码栈中的代码执行完成后,会先从微任务队列中取,把微任务队列中的任务清空,然后从宏任务中取第一个,然后不会马上走宏任务队列中的第二个,然后再去查看微任务队列,把微任务队列再清空。接下来,再去宏任务队列中取当时的第一个宏任务。
转载于:https://juejin.im/post/5bb0bd56e51d450e964a0004