前端执行上下文(简版)
执行上下文(Execution Context)是Javascript中最重要的基础概念之一,它决定了代码如何被解析和执行。
一、执行上下文基础概念
1、什么是执行上下文?
执行上下文是JavaScript代码执行的环境,它包含代码运行时所需的所有信息:
- 变量储存: 变量和函数的存储位置
- 作用域解析: 确定变量和函数的可访问性
- this绑定: 确定当前代码中this的值
- 代码执行流程: 控制代码的执行顺序
2、执行上下文的生命周期
二、执行上下文的类型
1、全局执行上下文(Global Execution Context)
- 代码首次执行时创建
- 整个程序只有一个全局上下文
- 在浏览器中,全局对象是window
- 生命周期:程序结束才销毁
2、函数执行上下文(Function Execution Context)
- 每次函数被调用时创建
- 每个函数调用都有自己的执行上下文
- 生命周期:函数执行完毕后销毁
3、Eval执行上下文(Eval Execution Context)
- 在 eval() 函数内部代码执行时创建
- 不推荐使用,存在安全风险
三、执行上下文的创建阶段
在代码执行前,JavaScript引擎会创建执行上下文,并进行以下操作:
1、创建变量对象(Variable Object,VO)
变量对象存储当前上下文中所有的变量和函数声明
2、建立作用域链(Scope Chain)
作用域链决定变量的可访问性:
3、确定 this 值
this 的值在创建阶段确定
四、执行阶段
在创建阶段完成后,进入执行阶段:
1、变量赋值
2、函数引用解析
3、代码逐行执行
五、执行上下文栈(Execution Context Stack)
JavaScript使用调用栈管理执行上下文
function first() {console.log('First');second();
}function second() {console.log('Second');third();
}function third() {console.log('Third');
}first();
执行上下文栈变化:
总结:执行上下文核心要点
1、三层结构: 全局、函数、eval山中执行上下文
2、两阶段生命周期: 创建阶段(VO、作用域链、this)和执行阶段
3、变量提升: 函数声明完全提升,变量声明部分提升
4、作用域链: 决定变量访问的链式结构
5、闭包本质: 函数保留其创建时的词法环境
6、调用栈管理: 后进先出(LIFO)的栈结构
7、ES6增强: 块级作用域和词法环境
8、调试工具: 利用调用栈和开发者工具进行调试