美文网首页
js事件轮询机制

js事件轮询机制

作者: 多年0以后 | 来源:发表于2021-05-21 10:41 被阅读0次

    这段代码的执行顺序,根据执行顺序分析、JS事件轮询原理

     console.log('script start');     // 1       
     setTimeout(function () {
          console.log('settimeout')               // 6           
     });
    let promise1 = new Promise(function (resolve) {
        console.log('promise1')            // 2
        resolve()
        console.log('promise1 end')          // 3 
    }).then(function () { 
        console.log('promise2')                // 5     
    });
    console.log('script end');             // 4         
    

    执行逻辑

    • 从代码执行角度来看 首先分析同步代码、在面的代码中异步代码只有promise.then回调与settimeout回调,所以他们肯定是最后执行的、其他同步代码按照书写顺序自上向下执行
    • promise.then回调虽然是异步执行,但是resolve()触发后实际上回调函数被加入到了js同步函数队列末尾,在轮询过程中仍然会作为同步代码优先执行
    • settimeout定时器在js中是由一个单独模块管理、其回调函数也是由一个单独队列管理,在js同步队列执行完毕,才会执行定时器队列代码

    结论

    • 在js中代码的执行实际上是由两个队列来组织代码执行时序的(主线程队列、定时器队列),优先轮询主线程队列、主线程队列空闲轮询定时器队列。
    • 实际上我们全局代码也在一个全局函数中,此函数在js解释器开始工作时,总是排在主线程队列头部。

    相关文章

      网友评论

          本文标题:js事件轮询机制

          本文链接:https://www.haomeiwen.com/subject/hpfwjltx.html