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属性初始化。

  1. callee:指向当前函数的引用
  2. length: 真正传递的参数的个数
  3. properties-indexes:就是函数的参数值(按参数列表从左到右排列)

 

以上是关于JavaScript的执行上下文的主要内容,如果未能解决你的问题,请参考以下文章

深入理解javascript执行上下文

JavaScript的执行上下文

JavaScript进阶之执行上下文和执行栈

理解Javascript之执行上下文(Execution Context)

16个必备的JavaScript代码片段

JavaScript高级部分概念用法