我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript执行上下文与执行栈是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript执行上下文与执行栈是什么

这篇文章主要介绍“JavaScript执行上下文与执行栈是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript执行上下文与执行栈是什么”文章能帮助大家解决问题。

1 何为执行上下文

代码执行前,浏览器的Js引擎先会创建代码执行的环境来处理此Js代码的转换和执行,代码的执行环境称为执行上下文。

执行上下文是一个抽象概念,包含当前正在运行的代码以及帮助其执行的所有内容。

2 分类

执行上下文主要分为三类:

  • 全局执行上下文 —— 全局代码所处的环境,不在函数内部代码都在全局执行

  • 函数执行上下文 —— 在函数调用时创建的上下文。

  • Eval执行上下文 —— 运行在Eval函数中代码时创建的环境,Eval由于性能问题在我们平时开发中很少用到,所有这里我们不在讨论。

接下来我们重点来讲全局上下文和函数上下文。

2.1 全局执行上下文

当我们的JS文件跑起来之后,首先创建的就是全局执行上下文。

当我们的文件里没有一行代码时,全局执行上下文中比较干净,只有两个东西。

  • 全局对象(浏览器里是WindowNode环境下是Global

  • this变量(指向的还是全局对象)

这时候如果我们在文件里写点东西,比如我写如下代码:

var name = '小明'
var age = 18
function showName(){
  return {
      name : name,
      age : age
  }
}

全局执行上下文就会立刻变成这个样子:

JavaScript执行上下文与执行栈是什么

上图可以看到,我们明明给nameage赋值了,咋还会显示undefined呢?这是因为执行上下文分为两部分,创建阶段和执行阶段。

  • 创建阶段 —— 执行上下文的初始化状态,做一些准备工作

  • 执行阶段 —— 代码一行一行执行

以上就是创建阶段的全局上下文概况,在创建阶段JS引擎将会做以下几件事:

  • window作为全局执行上下文对象

  • 创建this,this指向window

  • 给变量和函数安排内存空间

  • 变量赋值undefined,函数声明放入内存

  • 放入作用域链

接下来才会进入了全局执行上下文的执行阶段,也就是赋值阶段,如下图:

JavaScript执行上下文与执行栈是什么

需要注意的是执行上下文执行阶段是一行一行执行的,如下图所示:

JavaScript执行上下文与执行栈是什么

2.2 函数执行上下文

理解完全局执行上下文,函数执行上下文也我们只需要关注它与全局上下文之间的不同即可,两者之间不同主要表现在以下三个方面:

  • 创建时机:全局执行上下文在执行JS文件之前就被创建,而函数执行上下文则是在函数调用时创建。

  • 创建频率:全局上下文在代码刚开始被执行前创建一次,而函数执行上下文由脚本里函数调用次数决定,可以创建无数次。

  • 创建内容:全局执行上下文将window作为全局对象,而是函数执行上下文则是创建参数对象arguments;创建的this也不会指向全局对象,而是取决于函数是如何调用的。

我们通过下面这个例子来看函数上下文不同阶段的表现:

var name = '小明'
var age = 18
function showName(){
  return {
      name : name,
      age : age
  }
}

// 调用该函数
showName()

当我们调用showName函数时,就会进入到函数执行上下文的创建阶段,函数执行上下文的场景如下:

JavaScript执行上下文与执行栈是什么

接着就会进入到执行阶段,这个阶段函数内代码才会一行一行执行,这个例子中,因为没有涉及到变量的修改,因此函数上下文的内容保持不变,执行完毕后,函数上下文的生命周期就结束了。

当我们调用showName函数时,在浏览器中运行状况:

JavaScript执行上下文与执行栈是什么

3 执行栈

我们看到当函数执行完后,其对应的执行上下文也随之消失了。这个消失的过程,我们叫它出栈——在JS代码执行过程中,JS引擎会为我们创建“执行上下文栈”。

在全局代码执行前,JS引擎为了管理执行上下文,确保程序的执行顺序。JS引擎会创建一个栈来管理所有的所有的执行上下文对象

因为函数上下文可能会存在多个,我们不可能保留所有的上下文。当一个函数执行完毕,其对应的上下文必须让出之前所占用的资源。因此上下文的建立和销毁,就对应了一个” 入栈 “和” 出栈 “的操作。

当我们调用一个函数的时候,就会把它的上下文推入调用栈里,执行完毕后出栈,随后再为新的函数进行入栈操作。

我们通过一个例子来看一下这个过程:

function testA(){
  console.log('执行第一个测试函数的逻辑');
  testB();
  console.log('再次执行第一个测试函数的逻辑');
}

function testB(){
  console.log('执行第二个测试函数的逻辑');
}

testA()

1、执行之前,全局上下文创建:

JavaScript执行上下文与执行栈是什么

2、testA调用,testA对应函数上下文创建:

JavaScript执行上下文与执行栈是什么

3、testB调用,testB对应函数上下文创建:

JavaScript执行上下文与执行栈是什么

4、testB执行完毕,对应上下文出栈,剩下testA和全局执行上下文:

JavaScript执行上下文与执行栈是什么

5、testA执行完毕,对应执行上下文出栈,此时只剩下全局上下文:

JavaScript执行上下文与执行栈是什么

在这整个过程里,调用栈的变化示意如下:

JavaScript执行上下文与执行栈是什么

关于“JavaScript执行上下文与执行栈是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript执行上下文与执行栈是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript执行上下文和执行栈是什么

本篇内容介绍了“JavaScript执行上下文和执行栈是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是执行上下文?简而言之,执行上
2023-06-27

JavaScript怎么执行上下文

这篇文章主要介绍了JavaScript怎么执行上下文,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、怎么描述执行上下文1.1 本节知识导图:1.2 如果描述执行上下文当函数
2023-06-14

JavaScript中执行上下文的原理是什么

这期内容当中小编将会给大家带来有关JavaScript中执行上下文的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。执行上下文执行上下文是当前代码的执行环境。执行上下文主要是三种类型:全局执行上下
2023-06-15

javascript执行上下文详解

执行上下文可以说是js代码执行的一个环境,存放了代码执行所需的变量,变量查找的作用域链规则以及this指向等。同时,它也是js很底层的东西,很多的问题如变量提升、作用域链和闭包等都可以在执行上下文中找到答案,所以这也是我们学习执行上下文的原因
2023-05-18

深入学习JavaScript执行上下文

这篇文章主要介绍了深入学习JavaScript执行上下文,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下,希望对你的学习有所帮助
2022-11-13

一文聊聊Javascript中的执行上下文

本篇文章带大家聊聊Javascript中的执行上下文,分享一个思考题,通过对思考题的分析,想必会对执行上下文有更加深入的理解。
2023-05-14

JavaScript执行上下文中的this怎么使用

这篇文章主要讲解了“JavaScript执行上下文中的this怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript执行上下文中的this怎么使用”吧!前言在对象内部的方
2023-07-05

Javascript中的执行上下文如何创建

这篇文章主要介绍“Javascript中的执行上下文如何创建”,在日常操作中,相信很多人在Javascript中的执行上下文如何创建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Javascript中的执行上
2023-07-05

JavaScript函数执行上下文的this怎么调用

今天小编给大家分享一下JavaScript函数执行上下文的this怎么调用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Ja
2023-07-04

Js怎么存储执行上下文

这篇文章主要介绍“Js怎么存储执行上下文”,在日常操作中,相信很多人在Js怎么存储执行上下文问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Js怎么存储执行上下文”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-25

js怎么创建执行上下文

本篇内容主要讲解“js怎么创建执行上下文”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么创建执行上下文”吧!1、创建一个执行分为两个阶段:创建阶段和执行阶段。2、创建阶段会发生三件事:绑定
2023-06-25

编程热搜

目录