zoukankan      html  css  js  c++  java
  • js-执行机制之同步、异步、宏任务、微任务

    一:同步 & 异步  

    同步:js是单线程,按照代码从上到下的顺序执行。多个同步任务组成执行的执行栈。比如:

    alert(1); // 主线程上执行当前的同步任务
    console.log(2);
    

      如果不确定点击alert弹框的内容,在控制台是看不到打印2出现的。

      

     异步:不用等待当前任务的执行,等待异步任务有了执行结果,会放置一个时间到任务队列中。等待执行栈中的内容执行完毕就安顺序执行任务队列中的任务。

     同步任务、异步任务、执行栈、任务队列、主线程 个人理解的关系图如下:

    二:宏任务 & 微任务

      宏任务:

      微任务:

    执行顺序:同步 -> 异步 -> 宏任务 -> 微任务

    有些说法中是 先微任务 -> 宏任务;其实都一样,看针对那个任务而言。先微任务 ->宏任务, 微任务是本次宏任务中的,而宏任务是下一次的任务。先宏任务->微任务  是先把本次宏任务结束完成,再进行下一次的宏任务中的微任务。

    例如:

    setTimeout(() => {
            console.log('异步1任务time1');
            new Promise(function (resolve, reject) {
                console.log('异步1宏任务promise');
                setTimeout(() => {
                    console.log('异步1任务time2');
                }, 0);
                resolve();
            }).then(function () {
                console.log('异步1微任务then')
            })
        }, 0);
        console.log('主线程宏任务');
        setTimeout(() => {
            console.log('异步2任务time2');
    
        }, 0);
        new Promise(function (resolve, reject) {
            console.log('宏任务promise');
            // reject();
            resolve();
        }).then(function () {
            console.log('微任务then')
        }).catch(function () {
            console.log('微任务catch')
        })
        console.log('主线程宏任务2');
    

      执行结果:

    参考:微任务、宏任务js异步/同步/微任务/宏任务

    你对生活笑,生活不会对你哭。
  • 相关阅读:
    python之进程和线程2
    Python学习笔记7:yield生成迭代器
    Python学习笔记6:装饰器
    Python学习你急5:文件打开与处理
    Python学习笔记4:集合方法
    Python学习笔记3:字典方法
    Python学习笔记2:列表操作方法详解
    Python学习笔记1:字符串方法
    番外篇:Vim使用方法
    Day12: 正则表达式
  • 原文地址:https://www.cnblogs.com/adanxiaobo/p/11660899.html
Copyright © 2011-2022 走看看