Skip to content

执行上下文和执行栈

484字约2分钟

2022-04-22

提问

  1. 什么是执行上下文
  2. 什么是执行栈

执行上下文

执行上下文就是当前 JavaScript 代码被解析和执行时所在环境的抽象概念, JavaScript 中运行任何的代码都是在执行上下文中运行。

类型

  • 全局执行上下文

    最基础的执行上下文,不在任何函数中的代码都位于全局执行上下中。 全局执行上下文有两个特性:1. 创建一个全局对象,如 window;2. 将this指向这个全局对象。 一个程序只能有一个全局上下文。

  • 函数执行上下文

    每次调用函数时,都会为该函数创建一个新的执行上下文。 每个函数都拥有自己的执行上下文,但只有被调用时才会被创建。

  • eval函数执行上下文

    运行在eval函数里中的代码有自己的执行上下文

生命周期

  • 创建阶段

    • 创建变量对象
    • 创建作用域链
    • 确定this指向
  • 执行阶段

  • 回收阶段

执行栈

执行栈指 执行上下文栈(Execute Context Stack)。

执行栈 是一个存储函数调用的栈结构,遵循 先进后出 的规则。

  • javascript 执行在单线程中,所有代码都是排队执行
  • 执行全局代码时,创建全局执行上下文并压入执行栈的顶部
  • 每当进入一个函数的执行就创建一个函数执行上下文,并压入执行栈的顶部,当前函数执行完后,当前函数的执行上下文出栈,等待垃圾回收
  • 浏览器的JS引擎总是访问执行栈顶部的执行上下文
  • 全局执行上下文总是只有一个,它在浏览器关闭时出栈。