javascript执行顺序轻解

很久之前就看到javascript的宏任务和微任务但是一直都没有详细了解过,今天无聊索性就整理一下吧~

首先明确一点:javascript是单线程语言也就是一条高速公路,所有的多线程都是模拟出来的。
javascript的事件循环机制

在这里插入图片描述
同步任务优先执行,执行结束后执行异步任务,然后在执行下一个同步周而复始。

setTimeout

1.仅仅是在所规定的时间后将其任务放入队列,依旧会等待同步任务执行
2.HTML标准定时器内最低是4毫秒,写0也是4,类似字体大小最小为12px

setInterval

1.基本同timout
2.如果fn执行太慢,就会没有延迟时间因为是放入关系,而不是等待执行完。

进入正题(任务)

除了同步异步 我们有更精细的定义

  1. macro-task(宏任务):包括整体代码script,setTimeout,setInterval
  2. micro-task(微任务):Promise,process.nextTick
    不同类型的任务进入对应的Event Queue
    执行顺序为:
    1.先执行总体宏任务然后执行发现的微任务
    2.按顺序一个一个的执行总宏任务中的宏任务然后再执行其中对应的微任务
    **例如:A代表宏任务B代表微任务(格式不清晰可以看右侧的目录,用标题处理)

A1{

A2{

}.B1

A3{

A4 {

A5

}.B2

}

A4

}.B3

其执行顺序为:
A1-B3-A2-B1-A3-A4-B2-A5**

总结

简言之就是JS只有一个主线程,主线程执行完执行栈的任务后去检查异步的任务队列,如果异步事件触发(按照先宏任务再微任务依次触发),则将其加到主线程的执行栈。

同步-宏任务-微任务

常见的宏任务:I/O 、setTimeout、setInterval;
常见的微任务:Promise.then catch finally、process.nextTick

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值