事件循环

事件循环

事件循环即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
posted @ 2022-05-12 23:40  张尊娟  阅读(75)  评论(0编辑  收藏  举报