码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 前端 JS 经典:宏任务、微任务、事件循环(EventLoop)


    1. 前言概览

    js 是一门单线程的非阻塞的脚本语言

    单线程:只有一个主线程处理所有任务

    非阻塞:有异步任务,主线程挂起这个任务,等异步返回结果再根据一定规则执行

     2. 宏任务与微任务

    1. 都是异步任务
    2. 宏任务:script 标签,setTimeout,setInterval,setImmediate,I/O,接口调用
    3. 微任务:process.nextTick,Promise.then() catch(),Async/Await,Object.observe
    4. 注意:Promise 本身是同步任务,then,catch,finally 是异步任务
    5. async 中 await 右边代码是同步任务,之后代码是异步任务

    3. 事件循环

    主线程执行顺序:一个宏任务(script 标签)-> 同步任务 -> 微任务 -> 一个宏任务 -> 宏任务中的微任务(如果有) -> 下一个宏任务 -> ..... 直到 js 事件执行完成。

    4. 经典案例

    1. async function async1(){
    2. console.log('1') // 同2
    3. await async2()
    4. console.log('2') // 微1
    5. }
    6. async function async2(){
    7. console.log('3') // 同3
    8. }
    9. console.log('4') // 同1
    10. setTimeout(function(){
    11. console.log('5') // 宏1
    12. },0)
    13. setTimeout(function(){
    14. console.log('6') // 宏2
    15. },3)
    16. async1();
    17. new Promise(function(resolve){
    18. console.log('7') // 同4
    19. resolve();
    20. console.log('8') // 同5
    21. }).then(function(){
    22. console.log('9') // 微2
    23. })
    24. console.log('10') // 同6
    25. // 输出:4,1,3,7,8,10,2,9,5,6

  • 相关阅读:
    07-Go语言中map数据结构用法
    解决OpenOCD烧录STM32失败, 无法通过SWD连接的问题
    kubernetes(K8S)笔记
    Factorial Divisibility(数论,1600)
    django开发简易流程
    smqtt:高性能开源MQTT消息代理Broker
    基于学生成绩管理系统(附源代码及数据库)
    2023.11.17-hive调优的常见方式
    如何使用 ELEMENTOR
    vue之封装tab类组件
  • 原文地址:https://blog.csdn.net/weixin_64684095/article/details/134072265
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号