JS执行顺序

JS是单线程的,即一段时间只能执行一个任务。执行一段代码,js总是按照顺序执行的,只不过在执行的过程中不会等待异步任务。

同步任务与异步任务

同步任务:立即执行的任务,直接被主线程读取并执行。
异步任务:异步执行的任务,会交给任务队列去处理。异步任务又分为宏任务与微任务。

宏任务与微任务

宏任务:异步 Ajax 请求、setTimeout、setInterval、文件操作,其它宏任务。
微任务:Promise.then、.catch 和 .finally,process.nextTick,其它微任务。
同步的任务没有优先级之分,同步任务一定先于异步任务执行。异步执行有优先级,先执行微任务,再执行宏任务,同级别按顺序执行。

一道题目

async function async1() {console.log("async1 start"); //同步任务await async2(); //执行async2,然后跳出这个函数console.log("async1 end"); //同步任务
}async function async2() {console.log("async2"); //同步任务
}console.log("script start"); //同步任务setTimeout(function () {console.log("setTimeout"); //异步宏任务,进入异步任务队列
}, 0);async1();new Promise(function (resolve) {console.log("promise1"); //同步任务resolve();
}).then(function () {console.log("promise2"); //异步微任务,进入异步任务队列
});console.log("script end"); //同步任务

输出结果:
script start
async1 start
async2
promise1
script end
async1 end
promise2
setTimeout

当 async 函数执行到 await 时,会将 await 后面接的函数先执行一遍,然后跳出这个 async 函数,继续执行,同步任务执行完毕后,回到 async 函数中,如果这时 await 函数已经有了结果,那么就继续执行 async 函数,否则继续等待。
promise本身是同步的,它的.then方法时异步的。

js回调执行顺序,同步任务与异步任务,宏任务与微任务相关推荐

  1. 宏任务和微任务的总结(js队列执行顺序)+ 一点琐事(善待自己)

    本周日内容是:宏任务和微任务的总结(js队列执行顺序)+ 一点琐事(善待自己) 前言 之后每次文章都计划是 一点知识点 +生活中一点琐事(我也想做个技术博主,但是能力不足,只能再添加一些生活琐事了). ...

  2. js 异步执行_js执行机制:同步与异步(宏任务与微任务)

    关于JavaScript,我们需要了解js是一门单线程语言,一切js版的多线程都是用单线程模拟出来的!!而单线程则意味着,所有任务都需要进行排队,前一个任务结束,才会执行后一个任务,如果前一个任务耗时 ...

  3. 【JavaScript】JS 的执行

    JS 的执行 单线程执行 单线程执行:同一时间只能执行一个任务,只有把当前任务完成,才能执行下一个任务 这会造成线程阻塞(当前任务耗时过长,导致后面的任务不能被执行) for (let i = 0; ...

  4. Node.js 异步编程(附几个小练习题学会分析代码执行顺序)

    1. 同步API,异步API 同步API:只有当前API执行完成后,才能继续执行下一个API console.log('before'); console.log('after'); 异步API:当前 ...

  5. 关于Ajax load页面中js部分$(function(){})的执行顺序

    <script type="text/javascript">console.error(11111);$(function(){console.error(22222 ...

  6. js和jsp的执行顺序

    jsp页面中的代码执行顺序一直很不清楚,最近把这个给理了理 1.js脚本执行顺序优先于html标签 不明白的试试执行这个页面 <!DOCTYPE html PUBLIC "-//W3C ...

  7. 辉太郎看前端(js异步宏任务和微任务)

    前言 宏任务:setTimeout,setInterval,Ajax,DOM事件 微任务:Promise,async/await. 优先级:微任务执行要比宏任务要早. 注: 同步任务会和微任务按照出场 ...

  8. js的异步与宏任务(marcroTask)和微任务(microTask)

    咱们先看道面试题 让写出console.log的打印顺序 console.log(100);setTimeout(()=>{console.log(200); })setTimeout(()=& ...

  9. var和function谁先优先执行_浅谈JavaScript 的执行顺序

    JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解javaScript语言的运行机制,或者简单地 ...

最新文章

  1. Git基础(常用命令)介绍
  2. 特征工程(二) :文本数据的展开、过滤和分块
  3. ubuntu系统写路由指令_ubuntu/linux下设置永久路由
  4. KindEditor编辑器在ASP.NET中的使用
  5. python 文件操作 open()与with open() as的区别(打开文件)
  6. 9.11 strace:跟踪进程的系统调用 、ltrace:跟踪进程调用库函数
  7. 【BZOJ2728】[HNOI2012]与非 并查集+数位DP
  8. java camel swagger,Swagger将下划线转换为camelcase
  9. Glide4.0源码全解析(一),GlideAPP和.with()方法背后的故事
  10. 关于qcom camera cpp driver 的buf分析笔记(msm8996)
  11. c/c++ 二分法拓展,解决函数零点问题。
  12. php 红包过期退回,RabbitMQ功能实现1- 红包未领取退回
  13. 计算机桌面文件在哪儿,电脑微信接收文件存在哪里 接收文件保存电脑位置介绍...
  14. 邓白氏编码官方查询地址
  15. Java、六边形面积
  16. 与复旦大学《数学分析》编者商榷
  17. 匹兹堡大学计算机科学,匹兹堡大学计算机科学硕士排名第63(2020年TFE Times排名)...
  18. SAP采购订单屏幕BADI增强(实例)
  19. Google登录和facebook登录相关
  20. 【STM8L】STM8L之timer2定时中断

热门文章

  1. (转载)基于鱼群算法的函数寻优算法(matlab实现)
  2. Unity 移轴实现
  3. 【性能优化】网络编程 - PHP - 使用TCP长连接的一种优化思路 - 学习/实践
  4. 【笔记】行测——常识判断之地理常识总结与归纳(一)
  5. 谁来清理海澜之家“男人的衣柜”中的存货?
  6. keil5新建freertos工程
  7. 西安科大计算机专业排名,全国计算机专业大学排名(最新)
  8. 大数据挖掘建模案例分享:利用BP神经网络算法进行用户行为分析(三)
  9. 中国红色旅游行业运营状况与投资盈利预测报告(新版)2022-2027年
  10. 我用了两年时间去读《Thinking in Java》