执行上下文相关

可执行代码段分为全局代码,函数代码,eval代码,在执行这些代码之前都会经历创建执行上下文的过程。

执行上下文:
执行可执行代码段会创建执行上下文

函数执行的时候会创建执行上下文,通过上下文栈来管理不同的栈,在函数执行的时候创建完该函数的执行上下文的时候压栈。

  • 变量对象

    根据不同的可执行代码划分全局上下文的变量对象,函数上下文的变量对象。

    执行上下文分为两个阶段处理:分析和执行。分析阶段:首先用arguments初始化活动对象(函数上下文的变量对象称为活动对象,然后给变量对象添加形参,函数声明,变量声明等初始的属性值,执行阶段,更新变量对象的值

    这里需区分执行上下文的过程和函数执行的过程,关系是:函数执行 -> 执行上下文创建 -> 执行上下文分析 -> 代码执行 -> 更新活动对象

  • 作用域链

    js为词法作用域,意思是作用域是在函数定义的时候就已经确定了,而不是函数执行的时候

    至此修正函数从创建到执行过程:

1
2
3
4
5
6
7
8
9
函数创建-->
保存作用域到内部属性`[[scope]]`-->
函数执行前的准备工作-->
执行上下文创建并压入执行上下文栈-->
执行上下文分析阶段: 复制[[scope]]属性创建作用域链 -->
执行上下文分析阶段:活动对象的初始化 -->
活动对象压入当前函数作用域链顶端 -->
函数执行,更新活动对象 -->
函数上下文从上下文栈中弹出
  • this
    ecmascript的类型分为语言类型和规范类型,规范类型是指用来用算法描述ecmascript语言结构和语言类型的。包括:Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, Environment Record