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

继续上一篇文章(http://www.cnblogs.com/wangfupeng1988/p/3986420.html)的内容。javascript

上一篇咱们讲到在全局环境下的代码段中,执行上下文环境中有如何数据:html

  • 变量、函数表达式——变量声明,默认赋值为undefined;
  • this——赋值;
  • 函数声明——赋值;

 

若是在函数中,除了以上数据以外,还会有其余数据。先看如下代码:前端

以上代码展现了在函数体的语句执行以前,arguments变量和函数的参数都已经被赋值。从这里能够看出,函数每被调用一次,都会产生一个新的执行上下文环境。由于不一样的调用可能就会有不一样的参数。java

 

另一点不一样在于,函数在定义的时候(不是调用的时候),就已经肯定了函数体内部自由变量的做用域。至于“自由变量”和“做用域”是后面要专门拿出来说述的重点,这里就先点到为止。用一个例子说明一下:web

 

好了,总结完了函数的附加内容,咱们就此要全面总结一下上下文环境的数据内容。面试

全局代码的上下文环境数据内容为:json

普通变量(包括函数表达式),闭包

如: var a = 10;app

声明(默认赋值为undefined)webapp

函数声明,

如: function fn() { }

赋值

this

赋值

若是代码段是函数体,那么在此基础上须要附加:

参数

赋值

arguments

赋值

自由变量的取值做用域

赋值

给执行上下文环境下一个通俗的定义——在执行代码以前,把将要用到的全部的变量都事先拿出来,有的直接赋值了,有的先用undefined占个空

 

了解了执行上下文环境中的数据信息,你就不用再去死记硬背那些可恶的面试题了。理解了就不用背诵!

 

讲完了上下文环境,又来了新的问题——在执行js代码时,会有数不清的函数调用次数,会产生许多个上下文环境。这么多上下文环境该如何管理,以及如何销毁而释放内存呢?下一节将经过“执行上下文栈”来解释这个问题。

 

不过别着急,在解释“执行上下文栈”以前,还须要把this说一下,this仍是挺重要的。

说完this,接着说执行上下文栈。

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

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

另外,欢迎关注个人微博

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

相关文章
相关标签/搜索