javascript 执行上下文

作者: 淘淘笙悦 | 来源:发表于2018-06-09 12:14 被阅读23次

归纳总结一下执行上下文系列,其中包括了变量对象、作用域链和 this。本篇主要详细介绍执行上下文。

执行上下文(Execution Context,EC)可以理解为当前代码的运行环境。

在 javascript 中,运行环境主要分为全局环境函数环境、eval。代码运行时最先进入的是全局环境,而函数被调用时进入函数环境。全局环境和函数环境所对应的执行上下文我们分别称为全局上下文函数上下文
注:这里 eval 目前已经不被推荐使用,所以在这里也不做多余介绍。

一个 javascript 文件中很可能会有多个函数被调用,也就是说在 javascript 代码运行中很可能会产生多个执行上下文,那么如何去管理这多个执行上下文呢?
执行上下文是以栈(一种后进先出的数据结构)的方式被存放起来的,我们称之为执行上下文栈(Execution Context Stack,ECS)
javascript 代码一开始执行时最先进入到全局环境,此时全局上下文首先被创建并入栈,之后当调用函数时则进入相应的函数环境,此时相应函数上下文被创建并入栈,当处于栈顶的执行上下文代码执行完毕后,则会将其出栈。

所以在执行上下文栈中,栈底永远是全局上下文,而栈顶则是当前正在执行的函数上下文。

举个例子~
假设有一个 javascript 文件中包含如下代码

function fn2() {
    console.log('fn2')
}
function fn1() {
    console.log('fn1')
    fn2();
}

fn1();

这里我们以数组来表示执行上下文栈 ECStack=[];
则上述代码运行过程中执行上下文栈的行为如下

/*伪代码*/
// 代码执行时最先进入全局环境,全局上下文被创建并入栈
ECStack.push(globalContext);
// fn1 被调用,fn1 函数上下文被创建并入栈
ECStack.push(<fn1> functionContext);
// fn1 中调用 fn2,fn2 函数上下文被创建并入栈
ECStack.push(<fn2> functionContext);
// fn2 执行完毕,fn2 函数上下文出栈
ECStack.pop();
// fn1 执行完毕,fn1 函数上下文出栈
ECStack.pop();
// 代码执行完毕,全局上下文出栈
ECStack.pop();

以一个更形象的图来说明上述的流程


执行上下文栈 ECStack.jpeg

在一个执行上下文中,最重要的三个属性分别是变量对象(Variable Object,VO)作用域链(Scope Chain)this 指向
我们可以采用如下方式表示

EC={
    VO,
    Scope,
    this
}

从上面的叙述中,我们可以知道,一个执行上下文的生命周期分为创建执行两个阶段。
创建阶段主要工作是生成变量对象建立作用域链确定 this 指向
而执行阶段主要是变量赋值以及执行其它代码等。

那么关于执行上下文的大概介绍就到此为止了,下一篇会对执行上下文中的变量对象做详细的介绍。

相关文章

  • 执行上下文

    深入理解JavaScript执行上下文、函数堆栈、提升的概念 解密 JavaScript 执行上下文

  • js深度剖析 : 执行环境和作用域链

    执行上下文 execution context 又称执行上下文或者执行环境. 执行上下文是JavaScript中一...

  • JavaScript 执行

    JavaScript 执行 一段 JavaScript 经过编译会生成两部分:执行上下文,可执行代码。在执行上下文...

  • 精品技术贴汇总

    about 执行上下文 深入理解JavaScript执行上下文、函数堆栈、提升的概念 JavaScript深入之变...

  • 深入浅出执行上下文、词法环境、变量环境

    执行上下文的概念 执行上下文:javascript 代码解析和执行时所在的环境。 执行上下文的类型 执行上下文分为...

  • 2020年前端面试复习必读文章

    1. JavaScript 基础 1.1 执行上下文/作用域链/闭包 理解 JavaScript 中的执行上下文和...

  • 编写高效的javascript

    读书笔记 1.当执行javascript代码时,javascript引擎会创建一个执行上下文。执行上下文设定了代码...

  • 执行上下文

    [TOC] 1.执行上下文 1.什么是执行上下文? 简而言之,执行上下文是评估和执行 JavaScript 代码的...

  • 执行上下文(个人笔记)

    本文参考:javaScript执行上下文和执行上下文栈一篇文章看懂JS执行上下文什么是执行上下文?什么是调用栈? ...

  • Javascript中执行上下文与执行栈

    执行上下文是当前 JavaScript 代码被解析和执行时所在环境的抽象概念。 执行上下文的类型 全局执行上下文:...

网友评论

    本文标题:javascript 执行上下文

    本文链接:https://www.haomeiwen.com/subject/rxjhcftx.html