概念
- 代码执行时产生的环境(环境里有:this、变量、函数、类)。
作用
分类()
对比(作用域)
- EC:动态的,执行时才产生
- 作用域:静态,根据代码的书写位置
执行栈
- 特点:先进后出
- 执行过程
- 全局执行上下文压栈。代码按顺序执行,每调用一次函数,在栈内就会分配相应的空间给它产生的局部执行上下文,叠放在原有内容上班。谁在栈顶谁就是正在执行的函数,执行完毕退栈,移交执行权并回收内存(环境销毁)。
EC的生命周期
- 创建阶段(做了什么)
- 确定this的指向
- 建立环境记录(执行时在环境记录中找需要的xxx)
- 建立对外引用
- 在自己的环境中没有需要使用的xxx时使用
- 指向函数声明处所处的环境
- 执行阶段
- 代码按顺序执行
- AO(Active Object:活动对象,VO激活后就成了AO)
- 销毁阶段
环境记录
- VO(Variable Object:变量对象)
- 看参数
- 看声明式函数(记录的是整个函数)——若命名冲突,覆盖
- 看var变量(初始化值为undefined)——若命名冲突,忽略
- 注:let和const声明的变量也在记录环境记录中,但是不初始化,而不初始化的东西是无法使用的,所以在赋值之前访问都会报错,这段区域就叫它的暂时性死区。赋值初始化之后可以正常使用。
- 初始化:变量声明后第一次赋值。
作用域链
- 通过执行上下文的对外引用,可以一直向外寻找链成一个链条,链条的起点是函数执行时产生的局部执行上下文,链条的末尾永远是全局执行上下文,这个链条就叫做:作用域链。
JavaScript执行上下文
原文:https://www.cnblogs.com/Lotus3904/p/12432784.html