JS 总结之执行环境

🍓 运行环境

JavaScript 中,有三种代码运行环境:html

  1. Global 环境
  2. Function 环境
  3. Eval 环境

为了表示不一样的运行环境,JavaScript 中有一个执行环境的概念。git

🍑 执行环境

执行环境都有三个重要的属性:github

  • 变量对象
  • 做用域链
  • this

这三个属性跟代码运行的行为有很重要的关系,在以前的文章中都有详细分析。具体能够查看《JS 总结之函数、做用域链》《JS 总结之变量对象》《JS 总结之关于 this 应该知道的几个点》浏览器

当一段 JavaScript 代码执行的时候,JavaScript 解释器会建立执行环境,其实这里会有两个阶段:闭包

  1. 建立阶段(当函数被调用,可是开始执行函数内部代码以前)
  • 建立 Scope chain
  • 建立 VO / AO(variables, functions and arguments)
  • 设置 this 的值
  1. 激活/代码执行阶段
  • 设置变量的值、函数的引用,而后解释/执行代码

整个执行过程能够参考《JS 总结之闭包》中举的例子。函数

🍒 执行环境栈

当 JavaScript 代码执行的时候,会进入不一样的执行环境,这些执行环境会构成一个执行环境栈。在开始解析代码的时候,会将全局执行环境 globalContext 压入执行环境栈中:this

执行环境栈 = [globalContext]
复制代码

如今写个例子:spa

var a = 1

function d() {}

function b() {
  function c() {
    d()
  }
  c()
}
b()
复制代码

那么对应的执行环境栈为:code

执行环境栈 = [
  dContext
  cContext,
  bContext,
  globalContext
]
复制代码

当每一个执行环境执行完后,执行环境栈会将它往外丢,最后只剩下 globalContext。globalContext 直到应用程序退出(如关闭网页或浏览器)时才会摧毁。。htm

🚀 参考

相关文章
相关标签/搜索