美文网首页
为什么js是单线程?为什么设置异步?如何实现异步(js执行机制)

为什么js是单线程?为什么设置异步?如何实现异步(js执行机制)

作者: lucky_果果 | 来源:发表于2019-11-20 20:13 被阅读0次

1、js是单线程的,这与js最终服务于谁有关。js被浏览器解析渲染网页,使用户可以浏览及与页面发生交互行为。假设将js设计成多线程,用户对同一个DOM节点增加和删除,这是浏览器就蒙圈了,他究竟该听谁的。。。

2、假设没有异步,整个页面逻辑都是同步,及自上而下一步一步的执行。这就会出现一个很恐怖的显现,当上一行解析时间很长,就会导致后面的代码都没有办法执行。

3、异步的原理:事件循环(event loop), 也就理解了js的执行机制。

A、event loop1:将任务分为同步任务和异步任务。

           我们非常熟悉的setTimeout,setInterval,promise的回调函数,fech,ajax等都是异步任务。

    执行顺序:

     1)首先判断js是同步还是异步,若是同步则进入主进程,若是异步则进入event table;

    2)异步任务在event table中注册函数,当满足触发条件后,则被推入event queue。

    3)同步任务进入主线程就一直执行,直到主线程空闲,则去event queue中查看是否有要执行的异步任务,若有则推入主进程。

B、event loop2:宏任务和微任务

按照以上的分析,当我们遇到settimeout和promise时,就又疑惑了,为什么promise的回调函数会在settimeout之前执行?

这是因为只按照同步和异步划分不准确,准确的划分方式是:

宏任务:包括script、settimeout、setinterval

微任务:promise

执行过程:

1)首先执行宏任务,执行宏任务的过程如果遇到微任务,则将其放入微任务队列

2)宏任务都执行结束,会查看微任务事件队列,并将里面的任务一次执行完

重复上两个步骤,再结合同步和异步就是js的执行机制。

我目前还没有看到这样的总结,我自己总结下:js中的任务首先分为宏任务和微任务两类,每类任务中再分同步任务和异步任务。

人生是一场修行

 

        

相关文章

  • js 异步全览

    问题! JS 为什么是单线程的? 为什么需要异步? 单线程又是如何实现异步的呢? promise 的优点是什么? ...

  • 为什么js是单线程?为什么设置异步?如何实现异步(js执行机制)

    1、js是单线程的,这与js最终服务于谁有关。js被浏览器解析渲染网页,使用户可以浏览及与页面发生交互行为。假设将...

  • JS异步机制

    刚开始使用JS异步的时候,有这样的疑问:JS不是单线程的吗?为什么会有异步机制?但是如果没有异步机制,定时器又是怎...

  • 运行机制,宏任务 与 微任务

    运行机制: JS 的本质是单线程执行 事件队列:同步任务,异步任务() 运行机制 1,JS 的本质是单线程执行 单...

  • 浏览器工作原理

    为什么js是单线程,web works是多线程? 为什么js单线程却拥有异步? event loop? 为什么se...

  • js的事件循环和异步

    聊聊js的异步 首先,聊异步,得先弄清楚为什么不用同步,用同步会有什么问题,我们先明确一点,js的执行是单线程的,...

  • js的单线程和异步

    js的单线程和异步 js是一直是单线程的,浏览器才是实现异步的那个家伙

  • JS执行机制

    首先我们来看几个问题: 1.JS是单线程的么?2.JS有异步么?3.JS单线程怎么实现的的异步 1.JS是单线程的...

  • 16.3 JavaScript的执行机制

    浏览器事件轮询机制 js执行为单线程 网络请求、setTimeout、addEventListener属于异步事件...

  • js的异步是怎么实现的?

    参考文章:Javascript 异步实现机制 同步:js是单线程的,所有任务只能顺序执行,一个完成之后才能进行下一...

网友评论

      本文标题:为什么js是单线程?为什么设置异步?如何实现异步(js执行机制)

      本文链接:https://www.haomeiwen.com/subject/ptraictx.html