js执行上下文、执行栈、执行机制和事件循环

js执行上下文

执行上下文就是一个解析和执行JavaScript代码的环境的抽象概念。通俗地说,就是每当运行JavaScript代码的时候,就在执行上下文环境中运行的。

在JavaScript中执行上下文的三种分类:
1.全局执行上下文:这是默认或者说是最基础的执行上下文,一个程序中只会存在一个全局上下文,会位于执行堆栈的最底部,全局上下文会生成一个全局对象,并且将this绑定在全局对象window上
2.函数执行上下文:每当一个函数被调用的时候,都会重新创建一个新的函数执行上下文。
3.Eval函数执行上下文:执行在eval函数内部的代码也会有它属于自己的执行上下文。

执行栈

运行js代码的时候会创建执行上下文,但是执行上下文是需要存储的,它就是栈数据结构。所以用来存储代码运行创建的执行上下文就是执行栈。

执行机制

js中有同步任务和异步任务
1.同步任务:在主线程执行的任务,只有当前一个任务结束后,才会执行后一个任务
2.异步任务:是不进入主线程,而是进入任务队列里边的任务,任务队列中任务也会跟同步任务并列执行,任务队列里边的任务会拿到结果,只有当主线程空闲且任务队列通知主线程,某个任务队列可以执行了,该任务才会进行主线程。先进先出原则。常见的异步任务有:setInterval、setTimeout、promise.then等

事件循环

js是单线程的,因此JavaScript中的所有任务都需要排队依次完成

async function test4() {
  console.log(1);

  setTimeout(function () {
    console.log(2);
    new Promise(function (resolve) {
      console.log(3);
      resolve();
    }).then(function () {
      console.log(4);
    });
    console.log(5);
  }, 1000);

  new Promise(function (resolve) {
    console.log(6);
    resolve();
  }).then(function () {
    console.log(7);
    setTimeout(function () {
      console.log(8);
    });
  });

  const result = await async1();
  console.log(result);

  setTimeout(function () {
    console.log(9);
    new Promise(function (resolve) {
      console.log(10);
      resolve();
    }).then(function () {
      console.log(11);
    });
  }, 100);

  console.log(12);
}

async function async1() {
  console.log(13)
  return Promise.resolve("Promise.resolve");
}

test4();
// 依次输出1、6、13、7、Promise.resolve、12、8、9、10、11、2、3、5、4
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容