主要需要理解的是任务队列和线程处理。没有那个什么“圈”。网上很多的
图的那个圈是为了表现这是个循环,也就是说左侧是任务队列,右侧是各
种线程处理。收到任务就被添加到任务队列执行,需要线程处理的就发给
线程们,线程处理完了以后再触发回调,把回调的处理函数添加进任务队
列,用于执行,这样就是一个圈了,一个循环。
其实浏览器有很多线程,比如有js引擎线程,有事件触发器线程,网络请求线程,定时器线程,当js引擎处理到设计其他的线程的时候,比如有个异步请求,比如有个click事件绑定,比如有定时器,或者有了要更改dom的操作。当有了涉及其他线程的代码执行时候,浏览器会分配给相应的线程去执行,比如去请求,比如去等待被点击,比如去定时器读秒…当相应的事件或者说回调的条件被触发时,回调函数的执行代码会被塞到任务队列里最后,等待js引擎处理。但是注意gui渲染线程和js引擎是互斥的 一个时间只能一个在执行。