ES5之后的执行上下文

之前了解的执行上下文为ES3版本,今天才得以了解ES5版本执行上下文。来自前端桃园博客,做个总结增强记忆理解,表达和深度尚有不足,请前往原文

执行上下文与执行上下文栈引入

  • js引擎执行一段代码时,会创建相应的执行上下文。包含this指向、代码中变量、函数的存储引用、上层执行上下文变量、函数的引用。
  • 然后将执行上下文压入执行栈,执行代码。执行完毕时出栈,新的函数调用时新建执行上下文入栈。
  • 最终执行完所有代码,全局执行上下文出栈,执行栈空栈。
ESStack[
    globalContext,
    func1Context,
    func2Context
]

执行上下文

包含三个部分:this指向、词法环境、变量环境。(ES5的组成为变量对象、作用域链、this指向)。

this指向

老生常谈问题。

词法环境

词法环境存储let、const变量声明、函数声明、参数、外层执行上下文词法环境的引用,内含两个模块,分工存储。

环境记录器
  • 分为对象环境记录器(函数上下文中)、对象环境记录器(全局上下文中)。
  • 存储const、let变量声明、函数声明、参数。
  • const、let声明变量在代码未执行赋值前值为< uninitialized >,未赋值时引用会报错。
外层上下文词法环境的引用

类似于作用域链。

变量环境

  • 也是一种词法坏境,拥有词法环境所有的属性。
  • 存储词法环境未存储的由var声明的变量,赋值前的值为“undefined”。
    来源:前端桃园博客
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容