同步和异步
JavaScript语言的一大特点就是单线程,也就是说,同一时间只能做一件事.这是因为JavaScript这门脚本语言诞生的使命所致--JavaScript是为了处理页面中用户的交互,以及操作DOM而诞生的.比如我们对某个DOM元素进行添加和删除,不能同时进行.应该先进行添加,之后再删除.
为什么会有异步
单线程会导致JS执行时间过长,页面渲染不连贯,导致页面加载渲染阻塞.为了解决这个问题,HTML5提出Web Worker标准,允许脚本创建多个线程.于是,Js出现了同步和异步.
同步和异步的区别
其实同步和异步,
无论如何,做事情的时候都是只有一条流水线(单线程),同步和异步的差别就在于这条流水线上各个流程的执行顺序不同。同步就是一件事一件事的执行。只有前一个任务执行完毕,才能执行后一个任务.异步则是你在做一件事情时,因为这件事情会花费很长时间,在这等待过程中你可以先去处理其他事情,等这件事轮到你的时候再过来处理即可。
同步和异步的执行原理
同步任务都在主线程上执行,形成一个执行栈
.异步任务是通过回调函数
实现的.
- 先执行
执行栈
中的同步任务 - 异步任务(回调函数)放入任务队列中
- 一旦执行栈中的同步任务执行完毕后,系统就会按次序读取任务队列的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行
常见的异步模式
- 回调函数
- 事件监听
- 发布/订阅模式(又称观察者模式)
- promise
后来ES6中,引入了Generator函数;ES7中,async/await更是将异步编程带入了一个全新的阶段。