概述
- javaScript 采用单线程模式进行工作(避免线程同步的问题)
- 所谓”单线程”,就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。
- 异步编程用于处理耗时的操作时不至于阻塞
- 单线程好处:
- 实现起来比较简单,执行环境相对单纯
单线程坏处:
后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的
- 同步并不指的是同时执行,而是排队执行。
- 跟我们代码编写的顺序是完全一致的
一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。(阻塞)
异步模式
每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
- 耗时很长的操作都应该异步执行,避免浏览器失去响应
- 执行过如图

执行过程描述
对于同步代码 先压栈 然后再执行 执行完成后弹栈,遇到异步方法如(setTimeOut)先压入栈,然后函数内部是异步调用,放入内部API环境中(如 web APIs)里进行计时 然后继续往后执行然后继续往下执行
当异步 结束时 放入消息队列 一旦消息队列发生变化 event loop 会监听到 然后会把消息队列中的第一个 压入调用栈 然后继续执行
总结
先执行完同步任务 再执行异步任务
回调函数
所有异步编程方案的根基
由调用者定义,交给执行者执行的函数
调用者告诉执行者异步任务结束后该做什么

