js
为何是单线程的?单线程的js
是怎么实现异步的?问题一:多线程的js
操做同一个DOM,会形成浏览器的执行冲突(好比:一个删除,一个修改)。
问题二:经过事件循环机制(EventLoop)实现异步;git
EventLoop
JS是单线程的,主线程拥有一个执行栈和执行队列。主线程自上而下依次执行代码,并判断函数是同步的仍是异步的,同步的函数直接在主线程中执行,异步函数塞入执行队列。当主线程的函数执行完毕后,再将异步函数从执行队列中出栈,直到执行完毕。
macrotasks:github
microtasks:浏览器
==microtask的执行优先级高于macrotask==多线程
浏览器和Node的执行顺序不同,上述规则适用于浏览器异步