JavaScript的执行上下文
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript的执行上下文相关的知识,希望对你有一定的参考价值。
在javascript中有三种代码运行环境:
-
Global Code
- JavaScript代码开始运行的默认环境
-
Function Code
- 代码进入一个JavaScript函数
-
Eval Code
- 使用eval()执行代码
为了表示不同的运行环境,JavaScript中有一个执行上下文(Execution context,EC)的概念。也就是说,当JavaScript代码执行的时候,会进入不同的执行上下文,这些执行上下文就构成了一个执行上下文栈(Execution context stack,ECS)。
对于每个Execution Context都有三个重要的属性,变量对象(Variable object,VO),作用域链(Scope chain)和this。
变量对象是与执行上下文相关的数据作用域。它是一个与上下文相关的特殊对象,其中存储了在上下文中定义的变量和函数声明。也就是说,一般VO中会包含以下信息:
- 变量 (var, Variable Declaration);
- 函数声明 (Function Declaration, FD);
- 函数的形参
- 函数表达式(与函数声明相对)不包含在VO之中
- 没有使用var声明的变量(这种变量是,"全局"的声明方式,只是给Global添加了一个属性,并不在VO中)
激活对象 是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。
- callee:指向当前函数的引用
- length: 真正传递的参数的个数
- properties-indexes:就是函数的参数值(按参数列表从左到右排列)
以上是关于JavaScript的执行上下文的主要内容,如果未能解决你的问题,请参考以下文章