美文网首页
事件循环 Event Loop

事件循环 Event Loop

作者: _一九九一_ | 来源:发表于2019-10-28 10:35 被阅读0次
    • JavaScript 是一门单线程语言,异步操作都是放到事件循环队列里面,等待主执行栈来执行的,并没有专门的异步执行线程
    • Macro Task (宏任务)和 Micro Task(微任务), 并且每个宏任务结束后, 都要清空所有的微任务
    • Macro:script( 整体代码)、setTimeout、setInterval、I/O、UI 交互事件、setImmediate(Node.js 环境)
    • Micro:Promise、MutaionObserver、process.nextTick(Node.js 环境)

    题目

    console.log(1)
    setTimeout(function() {
      console.log(2)
    }, 0);
    const intervalId = setInterval(function() {
      console.log(3)
    }, 0)
    setTimeout(function() {
      console.log(10)
      new Promise(function(resolve) {
        console.log(11)
        resolve()
      })
      .then(function() {
        console.log(12)
      })
      .then(function() {
        console.log(13)
        clearInterval(intervalId)
      })
    }, 0);
    
    Promise.resolve()
      .then(function() {
        console.log(7)
      })
      .then(function() {
        console.log(8)
      })
    console.log(9)
    
    // 1 
    // 9
    // 7
    // 8
    // 2
    // 3
    // 10
    // 11
    // 12
    // 13
    
    console.log('1');
    
    setTimeout(function() {
      console.log('2');
    }, 0);
    
    Promise.resolve().then(function() {
      console.log('3');
    }).then(function() {
      console.log('4');
    });
    
    console.log('5');
    
    // 1
    // 5
    // 3
    // 4
    // 2
    
    console.log('1');
    
    setTimeout(function() {
      console.log('2');
    }, 10);
    
    new Promise(resolve => {
        console.log('3');
        resolve();
        setTimeout(() => console.log('4'), 10);
    }).then(function() {
        console.log('5')
    })
    
    console.log('6');
    
    // 1
    // 3
    // 6
    // 5
    // 2
    // 4
    

    相关文章

      网友评论

          本文标题:事件循环 Event Loop

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