js-基础总结3

Posted 有风吹过的地方丨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\')

以上是关于js-基础总结3的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript笔试题(js高级代码片段)

js简洁代码片段

使用带有渲染功能的 Vue.js 3 片段

JS常用代码片段-127个常用罗列-值得收藏

几个关于js数组方法reduce的经典片段

VsCode 代码片段-提升研发效率