宏任务微任务?
首先我们要知道JS的这几点
JS 的执行机制:
事件循环机制
据我所知,JS只能在两种环境运行 :
1.node.js
2.浏览器
JS执行顺序
1.从上到下一步一步,一次只做一件事(像极了我家楼下的面馆接客)
2.如果一行报错,则停止执行下面的代码
3.先执行同步代码,再执行异步代码
js任务分为同步任务和异步任务
同步么,就是一条主线走完
异步就是一个任务一次做不完 ,先执行一段,等会执行完其他任务,做好了准备再来执行第二段,第二段也被称之为回调,如果没有特殊处理,JS引擎在执行异步任务时,应该是存在等待的,不去做任何其他事情.
我们的宏任务和微任务都属于异步任务---->
事件循环 由宏任务和执行宏任务时产生的微任务组成
事件循环机制,其实就是宏任务>微任务>宏任务,整个script就是一个大的宏任务
一道题全解
<script>
console.log(1)
async function fnOne() {
console.log(2);
await fnTwo();// 右结合先执行右侧的代码, 然后等待
console.log(3);
/*
await 函数() ==> new Promise(() =>
函数()
其他代码 }).then(() =>{其他代码})
----------------------------------------------
执行完await后面的函数,就跳出这个async 加到微任务
*/
}
async function fnTwo() {
console.log(4);
}
fnOne();
setTimeout(() => {
console.log(5);
}, 2000);
let p = new Promise((resolve, reject) => { // new Promise()里的函数体会马上执行所有代码
console.log(6);
resolve();
console.log(7);
})
setTimeout(() => {
console.log(8)
}, 0)
p.then(() => {
console.log(9);
})
console.log(10);
</script>
结果是:1 2 4 6 7 10 3 9 11 14 8 12 13 5(2s)