js-基础总结3
Posted 有风吹过的地方丨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js-基础总结3相关的知识,希望对你有一定的参考价值。
1. 事件队列( JS的任务队列 )
浏览器是多线程的:
- GUI渲染线程
- HTTP网络请求线程( 6-7个 )
- 事件监听、定时器监听
JS的代码运行时单线程的,浏览器只分配一个GUI线程去执行我们的JS代码
- 对于大部分JS代码来讲,上面代码没有执行完成,下面的代码时不能执行的 " 同步编程 "
- 但是对于某些JS代码来讲( 事件绑定、定时器、Promise、async/await、ajax )等,我们在上面的代码没有处理的情况下,GUI线程能继续向下执行"异步编程"
GUI渲染过程中遇到异步操作,都会放置在Event Queue事件队列中
当浏览器件所有同步代码执行完成,回到事件池中( 事件队列/任务队列中 )查找,例如定时器,到时间了放到GUI中去执行,代码执行完成,又去事件池中查找,我们将这样的循环成为:Event Loop,事件循环机制
Event Queue 优先级队列
微任务优先级永远高于宏任务,宏任务的优先级是按照谁先到达执行谁先执行
微任务:promise / async / await ( nodejs )
宏任务:事件绑定、定时器、ajax异步请求
先找微任务,微任务中还有,则继续找微任务,一直到没有微任务了,才去宏任务中查找
async function async1(){
console.log(\'async1 start\')
await async2()
console.log(\'async1 end\')
}
async function async2(){
console.log(\'async2\')
}
console.log(\'script start\')
setTimeout(()=>{
console.log(\'setTimeout\')
},0)
async1()
new Promise(function(resolve){
console.log(\'promise1\')
resolve()
}).then(funciton(){
console.log(\'promise2\')
})
console.log(\'script end\')
以上是关于js-基础总结3的主要内容,如果未能解决你的问题,请参考以下文章