美文网首页
对js执行上下文的理解

对js执行上下文的理解

作者: hello_小丁同学 | 来源:发表于2020-09-16 10:50 被阅读0次

执行上下文

执行上下文有三种:

  1. 全局执行上下文
    在执行全局代码的时候会创建全局上下文
  2. 函数执行上下文
    在执行函数代码的时候会创建函数执行上下文
  3. eval执行上下文
    eval执行的代码段也会创建一个执行上下文

执行上下文是通过栈进行管理的,在栈底部是全局执行上下文,当开始执行函数,函数的执行上下文就会被push到栈的顶部,执行结束就会被从栈顶弹出,也标志着函数生命周期的结束。

在执行一段js代码之前会先进入执行上下文(execution context),在这个阶段会对变量和函数进行处理,具体流程:

  1. 形式参数(formal parameter)
    会把函数所有的形参作为VO(Variable Object)的key,对应的value初始化为undefined
  2. 函数声明(FunctionDeclaration)
    会把所有函数名称作为VO的key,对应的value被赋给对应函数的地址。如果VO里面已经包含了这个key,会把新的value赋给这个key。
  3. 变量声明(VariableDeclaration)
    会把所有的变量作为VO的key,对应的value初始化为undefined。如果变量名跟形参和函数名重复,不会对其覆盖。

上面的处理过程也解释了变量提升的原理。

VO和AO

VO(Variable Object)是执行上下文的一个属性,会存储形参、函数声明、和变量。
AO(Activation Object)在进入函数执行上下文中VO是不可被访问的,AO就承担了VO的角色。

函数的执行

function foo() {
  var x = 10
  function cat() {
    x++
    console.log(x)
  }
}
foo()

详细看下上面代码怎么执行的,函数执行分为两个阶段:1、创建阶段 2、执行阶段

  1. 创建阶段
    在执行到foo()的时候,先是进入创建阶段,函数会创建可执行上下文(execution content),同时会创建AO(Activation Object),并对AO进行初始化。
    创建阶段结束之后AO变成了
AO = {
cat: <cat函数的地址>
x: undefiend
}
  1. 代码执行阶段
    会对x进行赋值
AO = {
cat: <cat函数的地址>
x: 10
}

cat函数由于没有执行到,所以cat的AO没有被创建。

参考资料

相关文章

  • js 随笔

    js 执行机制: js执行上下文: 只有理解了js 执行上下文才能更好的理解 js变量提升以及 作用域和闭包 所谓...

  • 闭包和this

    执行上下文 执行上下文是什么 可以简单理解执行上下文是js代码执行的环境,当js执行一段可执行代码时,会创建对应的...

  • 你不知道的js变量提升

    所谓的js变量提升,笔者理解为就是执行上下文所引出的概念。那么我们需要着重来理解执行上下文,执行上下文理解了,所谓...

  • 前端程序员面试你应该懂的原生JS——2

    1. 谈谈你对JS执行上下文栈和作用域链的理解。 执行上下文就是当前 JavaScript 代码被解析和执行时所在...

  • JavaScript调用栈理解

    要理解js的调用栈,首先要 理解执行上下文。1.执行上下文的概念:是当前js代码被解析和执行所在环境的抽象概念2....

  • 对js执行上下文的理解

    执行上下文 执行上下文有三种: 全局执行上下文在执行全局代码的时候会创建全局上下文 函数执行上下文在执行函数代码的...

  • JS中的执行上下文

    执行上下文 1. 定义 执行上下文就是js代码被解析和执行时所在环境的抽象概念,js的所有代码都是在执行上下文中运...

  • 函数的底层处理机制

    js上下文分类 js上下文(哪一个区域下执行)分类: 1.全局上下文EC(G) 2.函数执行形成...

  • 我的JS笔记 -- 执行上下文

    执行上下文,就是Js执行的时候的一个运行环境/作用域(scope)。执行上下文决定了Js执行过程中可以获取哪些变量...

  • 《Web前端开发之JavaScript精英课堂》(六)

    对 作用域、作用域链、执行上下文对象(GO | AO)、闭包 的个人理解: JS分为全局和局部作用域,都属于词法作...

网友评论

      本文标题:对js执行上下文的理解

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