文章导图:

一.执行上下文
执行上下文的类型分为三种:
- 全局执行上下文:只有一个,浏览器中的全局对象就是 window对象,this 指向这个全局对象
- 函数执行上下文:存在无数个,只有在函数被调用的时候才会被创建,每次调用函数都会创建一个新的执行上下文
- Eval 函数执行上下文: 指的是运行在 eval 函数中的代码,很少用而且不建议使用
二.生命周期
执行上下文的生命周期包括三个阶段:
- 创建阶段
- 执行阶段
- 回收阶段
2.1 创建阶段
在创建阶段做了三件事:
- this的绑定
- LexicalEnvironment(词法环境) 组件被创建
- VariableEnvironment(变量环境) 组件被创建
伪代码如下:
ExecutionContext = {
ThisBinding = <this value>, // 绑定this
LexicalEnvironment = {
... }, // 词法环境
VariableEnvironment = {
... }, // 变量环境
}
2.1.1 this 的绑定
- 全局执行上下文中,this指向window对象(全局对象)
- 函数执行上下文中,取决函数如何调用.如果它被一个引用对象调用,那么 this 会被设置成那个对象,否则 this 的值被设置为全局对象或者 undefined
2.1.2 词法环境
词法环境是一种有标识符——变量映射的数据结构,标识符是指变量/函数名,变量是对实际对象或原始数据的引用。
词法环境的内部由两部分组成:
- 环境记录器: 用来储存变量个函数声明的实际位置
- 外部环境的引用:可以访问父级作用域
伪代码如下:
GlobalExectionContext = {
// 全局执行上下文
LexicalEnvironment: {
// 词法环境
EnvironmentRecord:

本文详细介绍了JavaScript中的执行上下文,包括全局、函数和Eval执行上下文,并阐述了执行上下文的生命周期,包括创建阶段(this绑定、词法环境和变量环境的创建)、执行阶段和回收阶段。此外,还解析了词法环境与变量环境的区别,并介绍了执行栈的工作原理。
最低0.47元/天 解锁文章
676

被折叠的 条评论
为什么被折叠?



