zoukankan      html  css  js  c++  java
  • 宏任务与微任务

    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()

  • 相关阅读:
    关于FPS游戏痕的问题
    移动端输入框获取焦点后,虚拟键盘弹起,把固定的底部也顶起来了
    正则匹配移动端
    js 判断对象是否为空
    jsonp跨域原理解析
    Webstorm的一些常用快捷键
    webstorm创建js文件时自动生成js注释
    帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
    this指北 (一篇读懂)
    原型链
  • 原文地址:https://www.cnblogs.com/jcxfighting/p/11755888.html
Copyright © 2011-2022 走看看