相信很多学习前端的朋友都认识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,会出现什么样的结果?(留给你们自己做)
第五题 : 在第四题已经给出答案,这里不做冗余的解释了。
如有侵权,联系作者删除
网友评论