• 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异步/同步/微任务/宏任务

    你对生活笑,生活不会对你哭。
  • 相关阅读:
    git 根据tag创建分支
    前端自适应背景框
    ps快速切图与切片模板复用
    【动植物研究动态】20220626文献解读
    Easy Sum
    斯特林数笔记
    Educational Codeforces Round 128 (Rated for Div. 2)
    Unity 在Preferences或Project Setting窗口创建自定义配置
    诡异js面试题&知识点
    phpstorm修改快捷方式
  • 原文地址:https://www.cnblogs.com/adanxiaobo/p/11660899.html
Copyright © 2020-2023  润新知