1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

解析关于JavaScript事件循环同步任务与异步任务

为什么JS是单线程的?

在学习JS中同步异步的问题前,需要明白,JS是单线程的。为什么它得是单线程的呢?现在先从它应用的场景来说,就是用来让用户与页面进行交互的吧。假如有JS是多线程的,那在这个线程里面,用户点击某个按钮会增加一个DOM节点,在另一个线程里面,用户点击这个按钮又会删除一个DOM节点,那么此时JS就不知道该听谁的了。这就是为什么会出现同步异步。

解析关于JavaScript事件循环同步任务与异步任务

执行栈与任务队列

执行栈简单来说就是先放先出,后放后出。那么执行栈就是把任务变成代码块,JS中所有的任务都会在主线程上执行然后形成一个执行栈。而队列则是相反的,队列是先进先出的,用来放置异步任务的回调函数的。

同步任务与异步任务

同步任务指的是在等待上一个执行任务结束才可以执行下一个任务,而异步任务指的是,不进入主线程、而进入“任务队列”(Event queue)的任务,只有“任务队列”通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。异步任务完成后,对应的回调函数会被加入到任务队列中等待执行,任务队列又被分为宏任务队列和微任务队列,优先执行微任务队列,常见的微任务有newPromise().then,常见的宏任务有定时器。

JavaScript主线程的执行栈被清空后,会读取任务队列中的回调函数,次序执行,然后不断重复这个过程,这就是事件循环。JavaScript主线程按顺序执行同步任务,在执行异步任务时,将任务交给对应的宿主环境执行,并将结果加入任务队列,等待主线程读取并执行。这样,JavaScript就实现了非阻塞式的异步编程。

以上就是JS同步异步的一些概念和执行机制的介绍。了解这些概念和机制,可以帮助我们更好地进行JS编程,提高代码的质量和效率。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7305.html