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

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

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

那js三座大山是什么呢?

1、原型和原型链

2、作用域和闭包

3、异步和单线程

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

先说一下我要讲的内容

1、什么是异步?

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

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

4、什么是单线程?

5、异步和单线程的关系

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

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

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

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

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

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

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

JavaScript的三座大山----异步和单线程_第1张图片
思考一个问题:什么时候需要异步?这个才是我们最关心的

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

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

JavaScript的三座大山----异步和单线程_第2张图片

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

场景的话:

1、定时任务    :     setTimeout、setInterval

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

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

什么时候需要使用呢?

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

②在阻塞程序的情况下

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

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

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

JavaScript的三座大山----异步和单线程_第3张图片
还是这个例子。我来解释一下异步和单线程两者关系

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

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

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

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

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

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

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

                                                                                                           如有侵权,联系作者删除

你可能感兴趣的:(JavaScript的三座大山----异步和单线程)