美文网首页工作生活
js运行机制题型

js运行机制题型

作者: 离陌夕 | 来源:发表于2019-07-03 20:50 被阅读0次

js运行的顺序是同步任务-》微任务栈-》宏任务栈,然后一直按照这个顺序

    1. promise和setTimeout
  console.log(1);
  new Promise((resolve, reject) => {
    console.log(2);
    resolve();
    setTimeout(() => {
      console.log(3);
    }, 0);
  }).then(function() {
    console.log(4);
    setTimeout(function () {
      console.log(5);
    }, 0);
  });
  // 上面的运行结果为1 2 4 3 5

第一行是同步任务,所以先执行,输出1;
new Promise()这部分也是同步任务,所以输出2;碰到setTimeout放到宏任务栈;
接着执行碰到promise.then这个微任务,所以先执行,输出4;
又碰到setTimeout这个宏任务,放到宏任务栈;
第一个setTimeout先到时间,所以输出3;
最后输出5;

 console.log(1);
  new Promise((resolve, reject) => {
    console.log(2);
    resolve();
    setTimeout(() => {
      console.log(3);
    }, 100);
  }).then(function () {
    console.log(4);
    setTimeout(function () {
      console.log(5);
    }, 0);
  });
// 上面的输出结果是1 2 4 5 3

更复杂的一种:

  console.log(1);
  new Promise((resolve, reject) => {
    console.log(2);
    resolve();
  }).then(function () {
    console.log(3);
    setTimeout(function () {
      console.log(4);
    }, 0);
  });
  setTimeout(function () {
    console.log(5);
    new Promise((resolve, reject) => {
      console.log(6);
      resolve();
    }).then(function () {
      console.log(7);
      setTimeout(function () {
        console.log(8);
      }, 0);
    });
  }, 0);
  // 上面的运行结果为1 2 3 5 6 7 4 8

改个时间就不一样了

  console.log(1);
  new Promise((resolve, reject) => {
    console.log(2);
    resolve();
  }).then(function () {
    console.log(3);
    setTimeout(function () {
      console.log(4);
    }, 0);
  });
  setTimeout(function () {
    console.log(5);
    new Promise((resolve, reject) => {
      console.log(6);
      resolve();
    }).then(function () {
      console.log(7);
      setTimeout(function () {
        console.log(8);
      }, 0);
    });
  }, 10);
  // 上面的运行结果为1 2 3 4 5 6 7 8
    1. eventLoop总结:
      js是单线程非阻塞的脚本语言。
      调用方法会 产生执行环境;
      a.所有的同步任务都在主线程上运行,形成执行栈;
      b.主线程之外有一个宏任务队列,一旦异步任务有了运行结果,就会在宏任务栈里面放置一个事件(对应的回调函数);
      b.一旦执行栈中的同步任务执行完成,就会去执行微任务栈里的任务,微任务栈里面的任务执行完毕,就会去执行宏任务栈里面的任务(事件、异步任务);
      d.上面三个步骤不断重复;
      微任务有:
      promise.then、process.nextTick、MutationObserver;
      宏任务有:
      setTimeout、setImmediate、setInterval、requestAnimationFrame;

相关文章

  • js运行机制题型

    js运行的顺序是同步任务-》微任务栈-》宏任务栈,然后一直按照这个顺序 promise和setTimeout 第一...

  • 最全js运行机制

    js运行机制

  • js new 运行机制

    js手札--js中new到底做了些啥JS核心系列:理解 new 的运行机制深入理解 Javascript 运行机制及原型

  • 浅析Vue.nextTick()原理

    1、为什么用Vue.nextTick() 首先来了解一下JS的运行机制。 JS运行机制(Event Loop) J...

  • 运行机制,宏任务 与 微任务

    运行机制: JS 的本质是单线程执行 事件队列:同步任务,异步任务() 运行机制 1,JS 的本质是单线程执行 单...

  • 前端知识点

    JS 1. 事件循环 「硬核JS」一次搞懂JS运行机制[https://juejin.cn/post/684490...

  • js运行机制

    js运行机制 在日常面试求职中,不免会做几道面试题,这面试题中往往会遇到js执行输出顺序,而这运行机制是我们每个前...

  • Event Loop

    关于浏览器的多进程,JS单线程等涉及浏览器整体运行机制、浏览器内核、JS运行机制,请看这篇文章,全是干货,什么时候...

  • JS的运行机制

    title: JS的运行机制date: 2018-12-28 11:02:52tags: js 为什么JavaSc...

  • JS常见题型

    怎么添加,移除,复制,创建,查找节点 创建节点:createDocumentFragment() 创建一个DOM片...

网友评论

    本文标题:js运行机制题型

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