搜索
简帛阁>技术文章>深入理解javascript原型和闭包(11)——执行上下文栈

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

继续上文的内容。

执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个

其实这是一个压栈出栈的过程——执行上下文栈。如下图:

 

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

如上代码。

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

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

执行到第13行,调用bar函数。

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

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

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

 

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

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

 

好了,我很耐心的给大家介绍了一段简短代码的执行上下文环境的变化过程,一个完整的闭环。其中上下文环境的变量赋值过程我省略了许多,因为那些并不难,一看就知道。

 

讲到这里,我不得不很遗憾的跟大家说:其实以上我们所演示的是一种比较理想的情况。有一种情况,而且是很常用的一种情况,无法做到这样干净利落的说销毁就销毁。这种情况就是伟大的——闭包。

要说闭包,咱们还得先从自由变量和作用域说起。

---------------------------------------------------------------------------

本文已更新到《深入理解javascript原型和闭包系列》的目录,更多内容可参见《深入理解javascript原型和闭包系列》。

另外,欢迎关注我的微博。

学习作者教程:《前端JS高级面试》《前端JS基础面试题》《React.js模拟大众点评webapp》《zepto设计与源码分析》《json2.js源码解读》

续上一篇文章(http://wwwcnblogscom/wangfupeng1988/p/3986420html的内容。上一篇我们讲到在全局环境下的代码段中,执行上下文环境中有如何数据:变量、函数
面提到的上下文环境作用域的知识,除了了解这些知识之外,还是理解的基础。至于“”这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住。但是你只需要知道应用的两种情况即可
上文(理解javascript原型作用域系列(1一切都是对象已经提到,函数就是对象的一种,因为通过instanceof函数可以判断。varfnfunction(){};consolelog(
果你是或者想成为一名JavaScript开发者,你必须知道JavaScript程序内部是如何执行的。理解执行上下文执行对于理解其他JavaScript概念(如变量声明提升,作用域至关重要
“一切都是对象”这句话的重点在于如何去理解“对象”这个概念。当然,也不是所有的都是对象,值类型就不是对象。首先咱们还是先看看javascript中一个常用的运算符typeof。typeof应该
说明:该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是其他主流面向对象语言区别最大的两个部分原型,当然,肯定少不了原型作用域
介从本章开始,我将陆续(翻译、转载、整理http://dmitrysoshnikovcom/网站关于ECMAScript标标准理解的好文。本章我们要讲解的是ECMAScript标准里的执行上下文
在上一篇文章中,介绍了原型的概念,了解到在javascript中构造函数、原型对象、实例三个好基友之间的关系:每一个构造函数都有一个“守护神”原型对象,原型对象心里面也存着一个构造函数的“位置”
理解前置知识点点前言在JavaScript中的”神兽“,很多同学会觉得闭包这玩意太恶心了,怎么着都理解不了其实刚接触JavaScript的时候我也是这样的。But,闭包真的非常重要!非常重要!非常
概述Javascript中的作用域上下文的实现是Javascript语言独有的特性,从某种程度上来说,Javascript语言是十分灵活的。Javascript中的函数可以采用各种各样的上下文,作