Skip to content

Latest commit

 

History

History
103 lines (88 loc) · 2.71 KB

事件循环机制.md

File metadata and controls

103 lines (88 loc) · 2.71 KB

Event-Loop


看题!!

  • 第一道

    不仅结果,使用 执行栈事件队列事件循环 分析哦!!

    for (var i = 0; i < 5; i++) {
      setTimeout(function() {
        console.log(new Date, i);
      }, 1000);
    }
    console.log(new Date, i);
  • 第二道

    比上题涉及到多了 macro-taskmicro-task

    (function test() {
      setTimeout(function() {console.log(4)}, 0);
      new Promise(function executor(resolve) {
        console.log(1);
        for( var i=0 ; i<10000 ; i++ ) {
          i == 9999 && resolve();
        }
        console.log(2);
      }).then(function() {
        console.log(5);
      });
      console.log(3);
    })()
  • 第三题

    注意的是 setImmediateprocess.nextTick 在什么会被推入执行栈

    console.log('golb1');
    setImmediate(function() {
      console.log('immediate1');
      process.nextTick(function() {
        console.log('immediate1_nextTick');
      })
      new Promise(function(resolve) {
        console.log('immediate1_promise');
        resolve();
      }).then(function() {
        console.log('immediate1_then')
      })
    })
    setTimeout(function() {
      console.log('timeout1');
      process.nextTick(function() {
        console.log('timeout1_nextTick');
      })
      new Promise(function(resolve) {
        console.log('timeout1_promise');
        resolve();
      }).then(function() {
        console.log('timeout1_then')
      })
      setTimeout(function() {
        console.log('timeout1_timeout1');
        process.nextTick(function() {
          console.log('timeout1_timeout1_nextTick');
        })
        setImmediate(function() {
          console.log('timeout1_setImmediate1');
        })
      });
    })
    new Promise(function(resolve) {
      console.log('glob1_promise');
      resolve();
    }).then(function() {
      console.log('glob1_then')
    })
    process.nextTick(function() {
      console.log('glob1_nextTick');
    })

答案在这些很详细的文章: