概述
众所周知,当前主流的JavaScript环境都是以单线程模式去执行代码的。
其原因和当时设计该语言的初衷有关系,最早这门语言就是运行在浏览器上的脚本语言,目的是为了实现页面上的动态交互,其核心就是dom操作,该点决定了他必须要使用单线程模式,否则就会出现很复杂的线程同步问题。
该种模式的有点很明显就是安全,但是缺点也很明显,万一遇到某个特别耗时的操作,后面的任务都需要排队等待前面执行完毕。这样就会导致出现假死的情况。
为了解决上述的问题,将任务执行的模式分成了同步模式和异步模式。
下面将要涉及到的内容有:
- 同步模式与异步模式
- 事件循环与消息队列
- 异步编程的几种方式
- Promise异步方案、宏任务/微任务队列
- Generator异步方案、Async/Await语法糖
同步模式
顾名思义就是代码按顺序依次执行,后一个任务只有在钱一个任务执行完后才会执行。
单线程的情况下,大多数任务都会以同步模式执行,注意这个同步是指排队执行,不是同时执行。
下面以一段代码分析同步模式的执行过程。
首先JavaScript会在内部调用栈压入一个匿名的调用,可以理解为将所有代码都放入一个匿名函数中准备执行。
"
然后先执行代码中的console.log(“start”)方法,执行完成后弹出。
函数的声明不会产生任何的调用,所以执行会继续往下走,随后执行test2