秒速赛车可以玩吗深入理解js引擎的执行机制
秒速赛车技巧-秒速赛车规律_官网-秒速赛车走势图
当前位置:主页 > 秒速赛车技巧 > 正文

秒速赛车可以玩吗深入理解js引擎的执行机制

  最近在反省,很多知识都是只会用,不理解底层的知识。所以在开发过程中遇到一些奇怪的比较难解决的bug,在思考的时候就会收到限制。所以,在这里一点一点补充基础知识吧。

  1. 灵魂三问:js为什么是单线程的?为什么需要异步?单线程又是怎么实现异步的呢?

  技术的出现,都跟现实世界里的场景密切相关。同样的,我们就结合现实场景,来回答这三个问题。

  js是一种脚本语言,脚本语言是为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言,脚本语言不需要编译,可以直接用,由解释器来负责解释。

  如果js不存在异步,只能自上而下执行,如果上一行执行时间很长,比如说没有网了,那么下面的代码就会被阻塞,对于用户来说,阻塞就意味着“卡死”,这样导致用户体验很差。由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行。

  通过Event Loop(事件循环),所以说,理解了Event Loop机制,也就理解了js的执行机制啦。

  首先判断js是同步的还是一步的,同步的就进入主进程,异步的就进入event table(事件表)

  异步任务在Event table中注册函数,当满足触发条件后,被推入event queue(事件队列)

  同步任务进入主线程后一直执行,直到主线程空闲时,才会去event queue中查看是否有可执行的异步任务,如果有就推入主进程中

  当前宏任务执行完成后,会查看微任务的event queue,并将里面的全部微任务依次执行完。

  重复以上两个步骤,结合Event Loop第一课和Event Loop第二课,就是更为准确的js执行机制了。

  //遇到new Promise直接执行,打印“马上执行for循环啦”;

  //查看本轮微任务,发现then方法里的函数,执行打印“执行then函数啦”

  //下一轮循环里,先执行一个宏任务,发现宏任务的event queue中有一个setTimeout中的函数,打印“定时器开始啦”

  运行结果是:【马上执行for循环啦----表演完毕!秒速赛车可以玩吗----执行then函数啦----定时器开始啦~~~】

  3s后,setTimeout里的函数会被推入到event queue中,而event queue(事件队列)里的任务,只有在主线程空闲时才会执行。

版权保护: 本文由 主页 原创,转载请保留链接: http://www.ecentiv.com//html/622.html