• 宏任务与微任务


    js是单线程,同步任务和异步任务

    不同的任务对应一个回调(事件、setTimeout、回调)定时器模块、事件处理模块、网络请求模块,什么时候放入事件队列,js引擎轮询,勾到主线程去执行。

    宏任务:

      分类:setTimeout、setInterval、requestAnimationFrame

      1.宏任务所处的队列就是宏任务队列

      2.第一个宏任务队列只有一个任务,执行主线程的js代码

      3.宏任务队列可以有多个

    微任务

      分类:new Promise().then() 、 process.nextTick

      1.微任务所处的队列就是微任务队列

      2.只有一个微任务队列

      3.上一个宏任务队列执行完毕之后如果有微任务队列就会执行微任务队列中的所有任务

      4.当宏任务队列中的任务全部执行完以后会查看是否有先执行微任务队列中的任务,如果有先执行微任务队列中的所有任务,如果没有就查看是否有宏任务队列

    console.log('start');
    setTimeout (() => { console.log('setTimeout')},0)
    new Promise( (resolve, reject) => {
       for(var i = 0; i < 5; i++) {  // 主线程上要立即执行的代码
         console.log(i)    
         }     
        resolve(); // promise实例对象的状态为成功的状态
    }).then(() => {
       console.log('Promise实例成功回调执行')  // 微任务队列
    })
    
    console.log('end')

    // start
    // 0,1,2,3,4
    // end
    // promise实例执行
    // setTimeout

      

    js主线程任务执行的时候,启动了一个宏任务

    宏任务队列            第二个宏任务队列      微任务队列

    执行主线程上的代码        setTimeout         new Promise().then()

  • 相关阅读:
    npx小工具
    2015 Multi-University Training Contest 1
    字符串 --- KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组
    AC自动机
    AC自动机
    区间合并 --- Codeforces 558D : Gess Your Way Out ! II
    暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry
    计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task
    Ubuntu 16.04 安装mysql并设置远程访问
    数学 --- 高斯消元 POJ 1830
  • 原文地址:https://www.cnblogs.com/jcxfighting/p/11755888.html
Copyright © 2020-2023  润新知