美文网首页JavaScript < ES5、ES6、ES7、… >程序员
JavaScript的三座大山----异步和单线程

JavaScript的三座大山----异步和单线程

作者: 小伙子太认真 | 来源:发表于2019-02-18 23:02 被阅读100次

    相信很多学习前端的朋友都认识JavaScript的三座大山。

    这里假设阅读的朋友对js已经有一定的基础。如果没有的话,请暂时留步。

    那js三座大山是什么呢?

    1、原型和原型链

    2、作用域和闭包

    3、异步和单线程

    前两篇没看可以到我的主页看一下,顺便点个赞。这个是我的动力。

    先说一下我要讲的内容

    1、什么是异步?

    2、同步和异步的区别是什么?举个例子

    3、前端对异步有哪些使用场景?以及什么时候需要使用异步?

    4、什么是单线程?

    5、异步和单线程的关系

    第一个问题:什么是异步?

    JavaScript中需要执行的程序需要的时间比较长或者需要等待,会执行其他的程序。

    用官方一点的话就是:不会阻塞程序的执行。

    不明白就让下一个问题,通过比较来解释。

    第二个问题:同步和异步的区别是什么?举个例子

    异步:下面这个例子的打印结果是:1 - 3 - 2 。

    过程是:打印出来1之后,到了定时器时js发现要等待,那好先把你放在一边(一边是指哪里?这里不说了,想深入了解的可以自己找资料。),我把最容易完成的事情先做完先,后面再找时间把这个需要等待事情完成。

    思考一个问题:什么时候需要异步?这个才是我们最关心的

    同步:下面的例子执行顺序是1 - 4 - 3

    解释一下:如果不点击弹出窗口的确认,后面的不会打印出来。阻塞程序运行

    第三个问题:前端对异步有哪些使用场景?以及什么时候需要使用异步?

    场景的话:

    1、定时任务    :     setTimeout、setInterval

    2、网络请求   :     ajax请求(这个比较实用,我会单独出一篇文章)、动态<img>加载

    3、事件绑定    :(这个有歧义,一般我们默认为是异步的。有兴趣自己找资料了解一下,我现在主要是想用最少的时间将最实用的技术点总结出来,以后有时间就会细讲。)

    什么时候需要使用呢?

    ①在可能需要等待的情况下

    ②在阻塞程序的情况下

    第四个问题 : 什么是单线程?

    单线程 : 就是一次只做一件事 。这就是需要异步的关系,如果一次性能够做几件事,那

    就不需要异步啦!用多线程就行了。

    还是这个例子。我来解释一下异步和单线程两者关系

    执行第一行:console.log(1),打印出1

    执行第二行:setTimeout执行,发现setTimeout是需要异步执行的,那好把你(callback)放进缓存,等我做完容易完成的先。(单线程的特点:一次做一件事,所以需要等待就放进缓存里,执行下一步,才不会造成程序阻塞。)

    执行最后一行:console.log(3),打印出3。

    然后所有容易的事情做完之后,会过头来想了一下,啊!我还有一些事情放在缓存中,那

    我继续做缓存中的事情。一秒后打印出来2

    思考一个问题 : 如果里面的定时器1000毫秒改为0,会出现什么样的结果?(留给你们自己做)

    第五题 : 在第四题已经给出答案,这里不做冗余的解释了。

                                                                                                               如有侵权,联系作者删除

    相关文章

      网友评论

        本文标题:JavaScript的三座大山----异步和单线程

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