EventLoop是什么?
EventLoop是一个执行模型,在不同的地方有不同的实现。浏览器和NodeJs基于不同的技术实现了各自的EventLoop。
JS是单线程语言,JS的Event Loop是JS的执行机制。深入了解JS的执行,就等于深入了解JS里的event loop。
浏览器的Event Loop是在html5的规范中明确定义。
NodeJS的Event Loop是基于libuv实现的。可以参考Node的官方文档以及libuv的官方文档。
libuv已经对Event Loop做出了实现,而HTML5规范中只是定义了浏览器中Event Loop的模型,具体的实现留给了浏览器厂商。
JS中的EventLoop
(1)JS为什么是单线程的?
因为JS最初是被设计用在浏览器中,如果JS是多线程的,比如说:有两个线程process1和process2,由于是多线程的JS,两个线程同时对一个dom进行操作,process1删除了该dom,而process2修改了该dom,此时浏览器就没法执行了。所以说JS是单线程的。
(2)JS中为什么需要异步呢?
因为JS中代码自上而下执行,如果不存在异步,当一行代码执行的时间过长时,后边的代码就会被阻塞,对于用户而言,意味着页面卡死,体验极其不好。
(3)JS中如何实现异步的呢?
通过事件循环(EventLoop),理解了EventLoop机制,就理解了JS的执行机制。
(4)JS中的EventLoop
举个栗子1:观察下面代码的执行顺序
conso