宏任务,微任务执行顺序

浏览器事件循环,那么意味着,必须是个闭环才能称之为循环。

JS引擎也被成为,事件队列;

JS执行队列,指的是它会按照先后顺序来执行;

JS是单线程,之所以说单线程(没有办法去操作JS的多线程),是因为浏览器没有给JS去提供多线程,所以说它就是单线程;

它没有给api让你开启一个多线程,它所有的东西都是给你安排好了,然后按照步骤一步一步执行,然后让你感觉它就是一个单线程;
实际上,浏览器整个的JS实行机制它是一个多线程,不过这多线程的机制把握在v8内核引擎里面,v8内核引擎它是多线程;

刚一开始进入到JS的时候它就是宏任务;

宏任务代码执行规则:从上到下,依次执行;

微任务:它遇到某一个代码块的时候会把它单独的放到另外一个队列里面,这个队列里面放的代码是除了从上到下执行的之外的代码;
例如:

let a=10;//宏任务
let promise=mew Promise((resolve,reject)=>{
    
    
    resolve(1)
})

//微任务
promise.then(res=>console.log(res))
this.$nextTick(()=>{
    
    
//异步  //微任务
})

一开始执行的就叫做 同步;
从主线程里分出去的放到另一个队列里的就叫异步;
异步里面又可以分成,宏任务,微任务;

在异步里执行,宏任务里面又会找那个是同步的那个是异步的,所以它又会回到JS引擎里面找所谓的大的宏任务;

微任务在浏览器里面会单独的放到一个队列里面;
微任务和宏任务不在一个队列;
看示意图:

在这里插入图片描述
这一整个它就完成了浏览器的事件循环

猜猜它们的打印顺序:

  setTimeout(() => {
    
    
      console.log(4);
    }, 0);

    let promise = new Promise((resolve, rehect) => {
    
    
      console.lgo(1);
      resolve(3);
    });

    console.log(2);

    promise.then((res) => console.log(res));

在这里插入图片描述

执行顺序:1,2,3,4

猜你喜欢

转载自blog.csdn.net/Menqq/article/details/114321776
今日推荐