怎么来理解Js是单线程的这句话?

Js是单线程指的是执行Js代码的只有Js引擎主线程。Js在js引擎中同步执行,永远都是运行执行栈最顶部的代码。那么js是怎么实现异步操作的呢?

首先,什么是异步函数呢?某些函数不会立即执行,它们需要等到某个时机到达之后才会执行,这样的函数称为异步函数。异步函数的执行时机,会被宿主环境控制(浏览器或node环境)。

Js引擎在执行代码过程中,碰到异步函数,它就会将它交给宿主环境来控制,本身转而继续执行其他代码。宿主环境在发现时机到达时,会将异步函数加入事件队列。事件队列是一块内存空间。

具体来说,宿主环境中还包括有计时器线程、网络请求线程、事件监听线程等,它们会分别来处理定时器回调函数、ajax请求回调函数、事件处理函数等的执行时机。并且所谓的执行时机也只是指处理函数加入到队列的时机。实际还需要等待执行栈清空后才可能轮到执行。

当Js引擎发现执行栈为空时,会将事件队列头部的代码加入执行栈中并执行。Js引擎的这种对事件队列取出执行方式,以及与宿主环境的配合,称为事件循环

你可能感兴趣的:(怎么来理解Js是单线程的这句话?)