js-基础总结3

1. 事件队列( JS的任务队列 )

浏览器是多线程的:

  1. GUI渲染线程
  2. HTTP网络请求线程( 6-7个 )
  3. 事件监听、定时器监听

JS的代码运行时单线程的,浏览器只分配一个GUI线程去执行我们的JS代码

  1. 对于大部分JS代码来讲,上面代码没有执行完成,下面的代码时不能执行的 " 同步编程 "
  2. 但是对于某些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')
原文地址:https://www.cnblogs.com/ycyc123/p/14823927.html