图画的有点丑,但是大概是这个意思,从主线程那里顺时针的看。

注意: 整个的流程是循环往复的。

注意: 只有主线程的同步代码都执行完了,才会去队列里看看还有啥要执行的没


小区别

在异步线程类别D那里,还有一些小区别:

主线程把setTimeout、ajax、dom.onclick分别给三个线程,他们之间有些不同

1、对于setTimeout代码,定时器触发线程在接收到代码时就开始计时,时间到了将回调函数扔进队列。

2、对于ajax代码,http 异步线程立即发起http请求,请求成功后将回调函数扔进队列。

3、对于dom.onclick,浏览器事件线程会先监听dom,直到dom被点击了,才将回调函数扔进队列。

总体实例

var a = 111;

setTimeout(function() {

console.log(222)

}, 2000)

fetch(url) // 假设该http请求花了3秒钟

.then(function() {

console.log(333)

})

dom.onclick = function() { // 假设用户在4秒钟时点击了dom

console.log(444)

}

console.log(555)

// 结果

555

222

333

444

步骤1: