js单线程(js在node和浏览器中运行的机制)

js 运行的顺序 同步→异步(微任务→宏任务)

先执行全局的同步代码,在node中从微任务队列中依次取出所有的任务放入调用栈中执行,然后开始宏任务,宏任务队列中的所有任务都取出来执行(在浏览器中,浏览器只取一个,执行完一个宏任务后再执行下一个),每个宏任务阶段执行完毕后,开始执行微任务,再开始执行下一阶段宏任务,以此构成事件循环

  • node中 同步→所有微任务→所有宏任务(同步→所有微任务→所有宏任务)

  • 浏览器中 同步→所有微任务→单个宏任务(同步→所有微任务→单个宏任务)

宏任务

一些异步任务的回调会依次进入宏任务队列,等待后续被调用,包括setTimeout setInterval等。

微任务

一些异步任务的回调会依次进入微任务,等待后续被调用,包括process.nextTick (Node独有) Promise.then() Object.observe等。

setTimeout(() => {
    console.log(1);
    Promise.resolve(3).then(data => console.log(data)) 
},0);
setTimeout(() => {
    console.log(2)
},0)
// node 1 2 3 浏览器 1 3 2

总结

  • 定时器宏任务 promise微任务 微任务先执行
  • 在浏览器是宏任务单独执行,node中是同时执行的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值