浅谈 js运行机制 、宏观任务、微观任务

                                        **今天我们谈一下我对js 运行机制 和宏观任务、微观任务的理解**

js运行机制有同步运行和异步运行
js是单线程运行模式在进入任务当中如果是同步任务 那么就直接被主线程运行 如果是异步任务 那么就进入任务队列中进行等待运行 直到主线程任务执行完毕那么这时候就会调用异步任务 如下面这张被我盗的图所示

在这里插入图片描述

串联一下子 也就是说 同步和异步进入不同的任务中 同步的进入 主线程 异步的进入event table中 然后会在event table生成回调函数到event queue中 当主线程任务结束后 会去event queue中读取对应的函数进行执行 以上过程不断重复就是 js运行机制 event Loop

以上是js代码的一个运行机制 下面呢我们来讲一下宏观和微观

异步又分为宏观微观 微观的优先级是大于宏观的 可能我描述的不清楚

宏观的事件有: html的解析 定时器 I/O、UI交互事件、postMessage、MessageChannel、setImmediate(Node.js 环境)
微观的事件有:promise的then和catch 等
ps:promise 在许多文章上被直接定义为微观任务 其实是有一定错误 promise本身是宏观 他的回调函数是异步 也就是.then .cantch 是微观任务

下图是宏观任务和微观任务的运行 ps:盗的图哟!!!在这里插入图片描述
也就是说 在一个宏观任务中 只有微观任务全部运行完毕后才会继续执行下一个宏观任务

下面看一段代码
 setTimeout(() => console.log("d"), 0);
 Promise(function(resolve, reject) {
    console.log(66)
    resolve()
    }).then(() => {
       console.log(77)
 });
    console.log(88)

首先我们明确有几个宏观任务 setTimeout Promise 
微观任务有   Promise.then()

首先 setTimeout 是异步宏任务执行 所以被扔进了 异步队列中进行等待 然后遇到了 Promise 
promise本身是宏观任务 异步执行同步调用  所以会被主线程运行 所以 输出了 **66** 然后 
遇到了.then 发现是微观任务 那么就放入到 异步对列中  主线程又运行了  console.log(88) 输出了 88 接下来  
当主线成 任务运行完毕后 开始了调用异步对列中的函数调用 输出了77  
这里会有人问 为什么 setTimeout 也在异步队列 中 为什么不先执行 setTimeout 呢 上面是做了解释  
微观任务的  优先级比宏观任务高!!!所以先执行 .then() 输出77 再输出 d 
       
promise 是 宏观任务 同步调用 所以在主线程运行的时候他会直接运行 所以 他会比setTimeOut先执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值