希望明天越来|

张尊娟

园龄:5年3个月粉丝:31关注:1

事件循环

事件循环

事件循环即js运行机制

js是单线程,先同步后异步,先微观再宏观

  1. 所有同步任务都在主线程进行,形成一个执行栈,
  2. 主线程之外还有一个“任务队列”,异步任务有了结果会在任务队列中防止一个事件
  3. 一旦执行栈中的所有同步任务完成之后,系统默认会读取任务队列中的的事件,结束等待状态
  4. 主线程不断重复第三步

主任务队列和等待任务队列

浏览器是多线程的,js是单线程的

js实现异步处理机制主要依赖于浏览器的任务队列

任务队列分为主任务队列和等待任务队列

在主任务队列自上而下执行的时候,若遇到一个异步操作,不会立即执行,而是把他放在等待任务队列中去排队,等主任务队列执行完后,再执行等待任务队列

宏任务和微任务

异步任务里分工宏任务和微任务

宏任务有:定时器(setTimeout(),setInterval(),).事件绑定,ajax,回调函数,node中的fs模块,script

微任务有:promise,async/aswait,procsee.nextTick,MutationObserver(html5新特性)

执行顺序

先执行主任务,执行完接着执行微任务,最后执行宏任务,按照条件的顺序依次执行

这种循环机制又叫事件循环(event loop)

console.log(1);
        setTimeout(() => {
            console.log(2);
            process.nextTick(() => {
                console.log(3);
            });
            new Promise((resolve) => {
                console.log(4);
                resolve();
            }).then(() => {
                console.log(5);
            });
        });
        new Promise((resolve) => {
            console.log(7);
            resolve();
        }).then(() => {
            console.log(8);
        });
        process.nextTick(() => {
            console.log(6);
        });
        setTimeout(() => {
            console.log(9);
            process.nextTick(() => {
                console.log(10);
            });
            new Promise((resolve) => {
                console.log(11);
                resolve();
            }).then(() => {
                console.log(12);
            });
        });
// 1 7 6 8 2 4 3 5 9 11 10 12

本文作者:张尊娟

本文链接:https://www.cnblogs.com/wszzj/p/16265000.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   张尊娟  阅读(85)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起