背景
js是单线程语言,其中执行代码的时候,是从上往下按顺序执行的,但是总有几行代码,需要大量的时间,会导致后面的代码无法执行,而影响用户的体验
例子:在执行一整段js代码的时候,其中一行代码需要向后台请求大量数据,下面有些dom的添加,以及数据的修改,显示的代码都无法执行,就为了等这一行代码
这个时候,异步就出来了,它将这行代码挂起,放到另一个线程中执行,然后后面的代码就可以立即执行了,等这行代码请求完数据后,然后回调执行某个方法,完成相应的功能即可
关于这些线程的理解,我们正式开始
浏览器进程下的线程
打开一个浏览器,他就是一个大的进程,然后下面就会有很多小的线程,其中js引擎就是一个小的单线程,然后还有其它的一些线程:GUI渲染线程,事件触发线程,定时触发器线程,异步http请求线程等
当js代码在执行的时候,首先会在js引擎线程中执行,碰到了Ajax请求的代码后,就会将它挂起,并放入到异步http请求线程中执行,然后继续执行后续代码,当Ajax请求完成之后,就会执行某个回调函数,回过来执行相应的代码
例子:当你需要向后台申请购物车中某物品的数量,然后下一行代码就是根据获取到的数量计算出总的价格并渲染到页面上,那么我们将这个异步申请数据的代码放入异步http请求线程中执行,有了结果的时候就回调过来,执行计算总价格的代码(这里就涉及到下一篇博客的内容了:异步编程)
【重点】
同理:定时器和事件也是一样的,
像这些把代码挂起,放到另一个线程中执行的代码就可以称之为异步代码,而在js引擎中从上往下依次执行的代码就是同步代码