首先我们要理解什么是同步和异步
同步:就是顺序执行的代码,调用这段代码我能直接获取到结果的就是同步
异步:就是稍后执行的代码,调用这段代码我可能没办法立即获取执行结果,需要通过别的操作才可以得到结果
但是JavaScript是以单线程的方式运行的,也就是同一时间只能进行一件事,试想一下,假如javascript是多线程的,如果线程1要删除一个DOM元素,节点2要让DOM元素运动起来并且显示,那么浏览器怎么知道你想要干什么,所以在诞生的时候选择了单线程
Runtime:
Javascript会将正在执行的任务放到栈(stack)中(特点:先进后出);(栈就是主线程)
Heap(堆)中保存着引用类型值,例如对象
Queue(队列) 任务队列由一系列待处理的任务组成,每个任务都有相对应的函数。当栈为空时则会从任务队列中取出一个任务处理。(特点:先进先出)
也就是说
在处理任务的时候,会先去处理主线程中的任务,然后等到主线程为空执行任务队列中的事件
那么说到这里必须说一说JS实现异步的一种机制:Event Loop (图片摘自