执行上下文堆栈

有三种类型的ECMAScript代码:全局代码,函数代码和eval代码。代码执行在它的执行上下文里。

有唯一的全局上下文,以及可能有多个函数和eval上下文。每一个函数调用,进入到函数的执行上

下文,执行函数的代码。当调用到 eval 函数, 进入到 eval 执行上下文,执行它的代码。

注意到,一个函数或许产生有限个上下文集合,因为每调用一个函数(甚至自身调用)产生一个

新的上下文,并伴随着新的上下文状态:

function foo( bar ){}
//调用同一函数
//生成了三个不同的上下文,在每次调用时
//同时由不同的上下文状态(bar的参数值不同)
foo(10);
foo(20);
foo(30);

一个上下文可以去激活另一个上下文称为调用者。一个上下文正在激活称为被调用者。被调

用者与此同时可能会成为别的被调用者的调用者(比如,一个函数被全局上下文调用,它又

调用了内部函数)。

当一个调用者激活(调用)了被调用者,调用者就挂起了它的上下文,并且转移了控制流程给被

调用者。被调用者就会推入栈,且成为正在执行的上下文。在被调用者结束之后,它就会移交控

制器给被调用者,再执行被调用者上下文过程(它可能激活别的上下文)直到它结束,依次类推。

被调用者可能简单的返回或许异常退出。抛出异常而未捕获可能退出(移除栈)一个或多个上下

文。

所有的ECMAScript程序运行时,执行堆栈如下图,堆栈的最上面是当前的执行的上下文:

当程序开始执行时,它就会进入到全局执行上下文,它会在堆栈的最下面,也是堆栈的第一个元素。

此外,全局代码会初始化,创建必要的对象和函数。在全局上下文执行时,它的代码可能会激活别

的(已经创建)的函数,这个函数将会进入到他们的执行上下文,压入新的元素到堆栈上,依次类

推。在这初始化执行完成之后,在运行的系统就会等着某些事件(比如,用户的点击)这样会激活

函数,并进入到一个新的执行上下文。

在下面的图里,有某个函数上下文叫EC1,以及全局上下文叫Global EC,我们有如下的流程堆栈修改

压栈和出栈的EC1

这里明确的解释了ECMAScript系统运行时,是如何管理执行的代码。

关于执行上下文的更多信息在下一节里,执行上下文。

正如我们所说的,每个执行上下文在堆栈里可能是类似于对象。让我们看看它的结构以及哪种状态(哪

种属性)一个上下文所需要的去执行它的代码。

转载于:https://www.cnblogs.com/branches/p/4883908.html

javascript之执行上下文堆栈相关推荐

  1. 深入理解Javascript之执行上下文(Execution Context)

    在这篇文章中,将比较深入地阐述下执行上下文 - Javascript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么,为什么某些函数 ...

  2. javascript的执行上下文

    https://juejin.im/post/5ba32171f265da0ab719a6d7 https://juejin.im/entry/599867b2518825241e220eaa 我只是 ...

  3. JavaScript:执行上下文执行上下文栈

    在JavaScript概念中,有一个概念比较难以理解,它就是执行上下文和执行栈.最近在网上查阅了很多资料,现在把我的一些理解写出来,希望对各位有些帮助. 一.执行上下文 什么是执行上下文?是不是我们平 ...

  4. javascript系列之执行上下文

    写在前面:一 直想系统的总结一下学过的javascript知识,喜欢这门语言也热爱这门语言.未来想从事前端方面的工作,提前把自己的知识梳理一下.前面写了些 DOM的知识,略觉水平有限.没几个月就要开赴 ...

  5. JavaScript学习系列之执行上下文与变量对象篇

    一个热爱技术的菜鸟...用点滴的积累铸就明日的达人 正文 在上一篇文章中讲解了JavaScript内存模型,其中有提到执行上下文与变量对象的概念.对于JavaScript开发者来说,理解执行上下文与变 ...

  6. 【前端圭臬】十:从规范看 JavaScript 执行上下文(上)

    前言 接下来我们来啃一个硬骨头,JavaScript 的 执行上下文(Execution Context). 与执行上下文相关的知识有很多弯弯绕绕,不过没关系,我们只需要以两个主要问题为线索展开.第一 ...

  7. 一篇文章让你理解面试难点:执行上下文(干货满满(附面试题))

    在JavaScript的运行过程中,经常会遇到一些"奇怪"的行为,不理解为什么JavaScript会这么工作. 这时候可能就需要了解一下JavaScript执行过程中的相关内容了. ...

  8. 以及其任何超类对此上下文都是未知的_浏览器原理系列 - JS执行上下文详解(一):作用域

    本文主要介绍JS执行上下文相关的内容,理解了JavaScript的执行上下文才能更好地理解JavaScript语言本身以及该语言一些特性,如变量提升.作用域和闭包. 一.作用域 1.1 作用域 作用域 ...

  9. 大话javascript 2期:执行上下文与执行上下文栈

    一.什么是执行上下文? 执行上下文(Execution Context): 函数执行前进行的准备工作(也称执行上下文环境) JavaScript在执行一个"代码段"之前,即解析(预 ...

最新文章

  1. 客快物流大数据项目(四):大数据项目为什么使用Docker
  2. form表单嵌套,用标签的form属性来解决表单嵌套的问题
  3. python转置_python数据分析类库系列Numpy之 数组转置和轴对换
  4. css的fill属性,css column-fill属性怎么用
  5. python命令行调试django代码_Django shell调试models输出的SQL语句方法
  6. linux服务器组件有哪些,推荐几个linux服务器面板
  7. arcade 物理系统_如何使用Python和Arcade库创建2D游戏
  8. mysql mha配置idrac远程关机_iDRAC远程管理功能试用_戴尔 PowerEdge R810(Xeon E7520/16GB/3*146GB)_服务器评测与技术-中关村在线...
  9. 将多张连续的静态图转成gif动态图
  10. perl调用shell命令并获取输出
  11. linux安装jdk8和tomcat8
  12. php基础知识(2),PHP基础知识2
  13. js基础-9-正则表达式
  14. PPT+VBA实现计时(倒计时)展示
  15. 网易云音乐最新免费下载音乐的方法----update2019/09/17
  16. java+swing+mysql员工工资管理系统设计分析
  17. 如何解决ueditor乱码问题
  18. Matlab画堆叠柱状图(颜色设置,x轴外部标注,y轴标注,颜色设置)
  19. 2019-4给学员试讲内容分享
  20. 电竞Dota2数据API接口 - 【联赛列表】API调用示例代码

热门文章

  1. C语言中的static 详细分析
  2. 立体匹配之NCC算法
  3. 配置FTP服务(一):pureftp部署和优化
  4. Java 中一个中文所占字节
  5. linux下jetty简单配置
  6. Qt学习之路(58): 进程间交互
  7. ORACLE NOT EXISTS不等值 改写成hive
  8. Luogu P4916 魔力环
  9. Eclipse遇到的错误
  10. struts2之OGNL用法