继续上文的内容。
执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个。
其实这是一个压栈出栈的过程——执行上下文栈。如下图:

可根据以下代码来详细介绍上下文栈的压栈、出栈过程。

如上代码。
在执行代码之前,首先将创建全局上下文环境。

然后是代码执行。代码执行到第12行之前,上下文环境中的变量都在执行过程中被赋值。

执行到第13行,调用bar函数。
跳转到bar函数内部,执行函数体语句之前,会创建一个新的执行上下文环境。

并将这个执行上下文环境压栈,设置为活动状态。

执行到第5行,又调用了fn函数。进入fn函数,在执行函数体语句之前,会创建fn函数的执行上下文环境,并压栈,设置为活动状态。

待第5行执行完毕,即fn函数执行完毕后,此次调用fn所生成的上下文环境出栈,并且被销毁(已经用完了,就要及时销毁,释放内存)。

同理,待第13行执行完毕,即bar函数执行完毕后,调用bar函数所生成的上下文环境出栈,并且被销毁(已经用完了,就要及时销毁,释放内存)。

好了,我很耐心的给大家介绍了一段简短代码的执行上下文环境的变化过程,一个完整的闭环。其中上下文环境的变量赋值过程我省略了许多,因为那些并不难,一看就知道。
讲到这里,我不得不很遗憾的跟大家说:其实以上我们所演示的是一种比较理想的情况。有一种情况,而且是很常用的一种情况,无法做到这样干净利落的说销毁就销毁。这种情况就是伟大的——闭包。
要说闭包,咱们还得先从自由变量和作用域说起。

深入理解javascript原型和闭包(11)——执行上下文栈相关推荐

  1. 深入理解javascript原型和闭包(16)——完结

    之前一共用15篇文章,把javascript的原型和闭包. 首先,javascript本来就"不容易学".不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学java ...

  2. 深入理解javascript原型和闭包(17)——补this

    本文对<深入理解javascript原型和闭包(10)--this>一篇进行补充,原文链接:http://www.cnblogs.com/wangfupeng1988/p/3988422. ...

  3. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  4. 深入理解javascript原型和闭包(9)——简述【执行上下文】下

    继续上一篇文章的内容. 上一篇我们讲到在全局环境下的代码段中,执行上下文环境中有如何数据: 变量.函数表达式--变量声明,默认赋值为undefined: this--赋值: 函数声明--赋值: 如果在 ...

  5. 深入理解JavaScript原型与闭包

    说明 本文为作者学习记录相关笔记及理解,如有不妥之处,请各位读者积极指出, 虽然标题是深入理解,但可能存在许多不够深入的地方,请各位小伙伴不吝赐教 一切都是对象 一切引用类型都是对象,对象是属性的集合 ...

  6. 深入理解javascript原型和闭包(15)——闭包

    前面提到的上下文环境和作用域的知识,除了了解这些知识之外,还是理解闭包的基础. 至于"闭包"这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住. 但是你只需要知 ...

  7. 深入理解javascript原型和闭包(2)——函数和对象的关系

    上文(理解javascript原型和作用域系列(1)--一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; co ...

  8. 深入理解javascript原型和闭包(10)——this

    接着上一节讲的话,应该轮到"执行上下文栈"了,但是这里不得不插入一节,把this说一下.因为this很重要,js的面试题如果不出几个与this有关的,那出题者都不合格. 其实,th ...

  9. 深入理解javascript原型和闭包(8)——简述【执行上下文】上

    什么是"执行上下文"(也叫做"执行上下文环境")?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常.第二句.第三句输出都是undefined,说明浏览 ...

最新文章

  1. docker 系列之 配置阿里云镜像加速器
  2. Debina解决浏览器中乱码(将系统字体改为中文)
  3. php 怎么打印条形码,php – 如何在垂直标签中垂直打印zpl条形码
  4. LINUX下的RAID使用
  5. 音视频技术开发周刊 55期
  6. Java04异常、断言、日志和调试
  7. poj3041 Asteroids
  8. Python批量提取docx格式Word文档中所有文本框内的文本
  9. 华为路由器交换机配置命令大整合,非常全,附pdf下载!
  10. 基于 WebRTC 构建 Web SIP Phone
  11. Unity3D Asset文件导出3DMax 可编辑格式
  12. 普通话测试-短文60篇文章,附带拼音(41-50篇)
  13. 超越前作,实现动漫风格迁移——AnimeGANv2
  14. iOS 升级HTTPS配置ATS-----(1)------
  15. Android 之 自动拨号
  16. 物美集团携手SAP ERP项目成功上线(转)
  17. 卷积神经网络超详细介绍
  18. python实现推广小项目
  19. 邓凡平WIFI学习笔记4:WiFi Simple configuration
  20. MySQL数据库企业级应用实践

热门文章

  1. ExtJs 实现动态列,动态多表头 在这里添加日志标题
  2. Java8采用stream、parallelStream迭代的区别
  3. python软件下载网站
  4. MySql数据库连接池
  5. (自己测试没有问题)解决git clone时报错:The requested URL returned error: 401 Unauthorized while accessing
  6. PHP设置页面显示编码
  7. team网卡配置_Windows下的网卡Teaming 配置教程(图文)
  8. python 装饰器分类_Python 装饰器(Decorators) 超详细分类实例
  9. python中的itertools_在python中使用itertools操作csv数据
  10. 图片流写出 并带数据_第九章 IO流