javascript中的Async(异步)

javascript是一个单线程的程序,这个线程就是JS执行引擎,在客户端由浏览器提供,在服务器端由Nodejs(等)提供。js程序都是有若干个程序块组成,某一时刻只能执行一个程序块,剩下的程序块在以后的时刻执行。我们常常用的console就是异步的,浏览器最后执行console。

Event Loop(事件循环)

JS引擎不是独立的,而是依托于宿主环境(浏览器或nodejs),这些宿主环境提供了一种机制,有一个共同的线程去处理这些程序的代码块,每个时刻都会调用JS引擎,称为Event Loop(事件循环)。伪代码说明:

BaiduShurufa_2016-7-11_11-14-41

所以,对setTimeout可以解释其原理:不是将callback放到Event Loop的队列,因为放进去就马上被执行了,而是设置一个timer,timer过期以后,浏览器将该callback放到Event Loop队列等待立即执行。所以可以解释setTimeout,setInterval等,不一定会按照我们设置的时间精确执行,有可能推迟。这个取决于当前Event Loop队列。

 

本文参考原文:https://github.com/getify/You-Dont-Know-JS

javascript
作者:张雪飞
出处:https://zhangxuefei.site/p/1559
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

发表评论

电子邮件地址不会被公开。 必填项已用*标注