JavaScript的异步实现机制

阅读 4.3k
2 个回答

js能异步是因为它用能调用的模块是异步的。

js永远都是单线程的。(当然,如果你非要说work),而且只有一个事件队列(你也可以理解成任务队列)
他之所以异步是是因为 某些的模块是异步的。
举个栗子,ajax
当你发送一个异步网络请求后,js的主线程不会一直等待这个请求返回,而是执行事件队列里下一个事件。
请注意,js并没有实现如何发送网络请求,js只是调用了某个能发送网络请求的模块,而这个模块是通过c++或其他语言实现。然后这个模块在等待请求的结果,当得到响应后,便把响应成功这个事件添加到js的事件队列的队尾。
你看,网络请求发送的同时,js依然在执行,这显然是异步的。

这篇文章的重点就是这一句了:

我们必须清楚一点,触发和执行并不是同一概念,计时器的回调函数一定会在指定delay的时间后被触发,但并不一定立即执行,可能需要等待。所有JavaScript代码是在一个线程里执行的,像鼠标点击和计时器之类的事件只有在JS单线程空闲时才执行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题