前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript-执行上下文

JavaScript-执行上下文

作者头像
WEBING
发布2019-03-13 15:20:20
3820
发布2019-03-13 15:20:20
举报
文章被收录于专栏:前端の进行时前端の进行时

一、执行上下文

1.1 概念

当函数执行时,会创建一个称为执行上下文的内部对象(可理解为作用域)。一个执行上下文定义了一个函数执行时的环境

二、产生执行上下文的两个阶段

(1)在JavaScript解释器内部,每次调用执行上下文,分为两个阶段,①创建阶段②激活/代码执行阶段

2.1 创建阶段

第一阶段是创建阶段,(当函数被调用,但未执行任何其内部代码之前)。在创建阶段主要做三件事:

(1)创建作用域链(Scope Chain)。 (2)创建变量对象(函数的形参、函数声明、变量声明)。 (3)求”this“的值。

创建阶段
创建阶段

当调用foo(22)时,创建状态如下所示

创建阶段
创建阶段

2.2 激活/代码执行阶段

(1)创建状态负责处理定义属性的名字,不为其指派具体的值,以及形参/实参的处理。

(2)一旦创建阶段完成,执行流进入函数并且激活/代码执行阶段,Execution Context object就会更新。

激活/代码执行阶段
激活/代码执行阶段

2.3 三个属性

(1)对于每个执行上下文(Execution Context)都有三个重要的属性,①变量对象(Variable object,VO),②作用域链(Scope chain)和 ③this

三个属性
三个属性

三、变量对象(Variable Object)

3.1 概念

(1)变量对象(variable object) 是与执行上下文相关的 数据作用域(scope of data) 。

(2)VO是与上下文关联的特殊对象,用于存储被定义在上下文中的 变量(variables) 和 函数声明(function declarations) 。

(3)VO是一个抽象的概念,不同的上下文中,它表示使用不同的object。例如,在global全局上下文中,变量对象也是全局对象自身[global object]。(这就是我们可以通过全局对象的属性来指向全局变量)。

3.2 初始化过程

进入执行上下文时,VO的初始化过程具体如下:

(1)函数的形参(当进入函数执行上下文时) 变量对象的一个属性,其属性名就是形参的名字,其值就是实参的值;对于没有传递的参数,其值为undefined

(2)函数声明(FunctionDeclaration, FD) 变量对象的一个属性,其属性名和值都是函数对象创建出来的;如果变量对象已经包含了相同名字的属性,则替换它的值。

函数声明
函数声明

(3)变量声明(var,VariableDeclaration) 变量对象的一个属性,其属性名即为变量名,其值为undefined;如果变量名和已经声明的函数名或者函数的参数名相同,则不会影响已经存在的属性。

变量声明
变量声明

四、活动对象(Activation object)

(1)只有全局上下文变量对象允许通过VO的属性名称间接访问;

(2)在函数执行上下文中,VO是不能直接访问的,此时由激活对象(Activation Object,缩写为AO)扮演VO的角色。

AO
AO

(3)激活对象是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。

AO
AO

五、VO和AO的关系

对于VO和AO的关系可以理解为,VO在不同的Execution Context中会有不同的表现:当在**Global Execution Context中,可以直接使用VO;但是,在函数Execution Context中,AO**就会被创建。

VO和AO的关系
VO和AO的关系

参考文章

了解JavaScript的执行上下文

JavaScript 论代码执行上下文

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、执行上下文
    • 1.1 概念
    • 二、产生执行上下文的两个阶段
      • 2.1 创建阶段
        • 2.2 激活/代码执行阶段
          • 2.3 三个属性
          • 三、变量对象(Variable Object)
            • 3.1 概念
              • 3.2 初始化过程
              • 四、活动对象(Activation object)
              • 五、VO和AO的关系
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档