JS执行机制:同步异步 ( 宏任务和微任务)

   // js执行机制:
        //  js是单线程语言,但是允许同步和异步执行
        //同步就是一个任务完成后再下一个,异步就是可以多个任务同时进行.
        //问题1 :   结果是 1111   333 2222
        console.log(1111)
        setTimeout(function () {
            console.log(22222222);
        }, 0);
        console.log(333333333)

        //问题2:
        //同步任务:  同步任务都在主线程上执行,形成一个执行栈
        //异步任务:js的异步是通过回调函数实现的 ,一般异步任务有三种类型:
        //1.普通事件,如click,resize等  
        //2.资源加载, 如 load, error等
        //3.定时器,包括setinterval,settimeout等
        //异步任务相关的回调函数添加到任务队列中(任务队列也叫做消息队列),等到主线程空闲时再执行.
        console.log(1111)
        setTimeout(function () {
            console.log(22222222);
        }, 0);
        console.log(333333333)
        //输出结果是:  1111 333 2222;
  //问题2的执行步骤:  先把执行栈的同步任务执行完,然后依次读取任务队列中的异步任务,被读取的任务进入执行栈,开始执行.

 

异步任务: 分为 宏任务和微任务 

 

 

 先执行宏任务, 每执行完一个宏任务, 就检查有没有待执行的微任务, 如果有, 则执行所有的微任务, 完成之后再执行下一个宏任务. 

 

  //问题3:  事件循环 (event loop)
        console.log(1111)
        document.onclick = function () {
            console.log('click')
        }
        setTimeout(function () {
            console.log(22222222);
        }, 5000);
        console.log(333333333)
        //这个会先输出 111 3333,然后根据点击时间,
        //  0-5s点击: 任务队列中会依次有onclick和settimeout两个任务,结果会先输出click再222;
        //  5s以后点击:任务队列中会依次有 settimeout和onclick两个任务,结果会先输出222再click

        //在这个过程中,主线程执行完,会查询任务队列,取出一个任务,推入主线程处理,
        //然后继续重复该动作, 该过程称为事件循环

 

 

promise 有三种状态:初始化,成功,失败。

posted @   我的猫在哪里  阅读(238)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示