什么是单线程?
- 单线程就是同一个时间内只执行一件事情,做完一个做下一个
-
为什么要JS 中要出现异步代码
因为JS单线程执行的特性,如果按单线程模式正常执行的话,那么一些耗时任务就会阻塞任务的执行 ```javascript console.log(1) setTimeout( () = { console.log(3); },4000) console.log(2);
// 如果JS不做异步任务队列处理的话,那么执行结果就是1,3,2; 而且因为中间有个延时器他会延迟2的打印
// 但是如果有了这个异步队列,就可以先执行1,2,然后打印3;
<a name="to270"></a>
### 常见的宏任务
- setTimeout
- setinterVal
- 代码块,一个文件就是一个代码块
- 一个<script></script>也是一个代码块
<a name="UEC9k"></a>
### 常见的微任务
- mutationObserver
- Promise 里面的then和catch方法
```javascript
/*
* @Author: WangXinLe
* @Date: 2021-12-11 18:24:49
* @Last Modified by: WangXinLe
* @Last Modified time: 2021-12-11 18:24:49
*/
// 微任务和宏任务的执行顺序
const p = function() {
return new Promise( (resolve, reject) => {
const p1 = new Promise( (resolve, reject) => {
setTimeout(() => {
resolve(1)
},0)
})
p1.then(res => {
console.log(res)
})
console.log(3);
resolve(4);
} )
}
p().then((res) => {
console.log(res);
})
console.log('end');
/**
* 先执行 3
* 后执行 end
* 后执行 4
* 最后执行 1
*/