什么是执行上下文
1.什么是执行上下文
总结一句话:执行上下文就是当前javascript代码被解析和执行时存在的环境(抽象概念)。
2.执行上下文的类型
(1)全局执行上下文:这是默认的,最基础执行上下文。
- 不在函数内部的代码都位于全局执行上下文中
- 创建一个全局对象,其实就是我们的windown对象
- 将this指针指向这个全局对象。
(2)函数执行上下文:每次函数被调用的时候,就会创建一个新的执行上下文。 - 每个函数都有自己的执行上下文
- 一个程序中可以存在任意数量的函数执行上下文
- 每一个函数执行上下文被创建,它都会按照特定的顺序执行一系列的步骤
(3)eval函数执行上下文:运行在eval函数中的带吧也获得自己的执行上下文
3.执行上下文的生命周期
总的来说:创建阶段—执行阶段—回收阶段
以函数执行上下文为例
(1)创建阶段
当函数被调用,但是未执行内部的任何代码之前,会做以下几件事
-
创建变量对象:首先会初始化函数的参数arguments(带参函数的那个变量),提升函数声明和变量声明。
-
创建作用域链:在执行上下文创建阶段,作用域链是在变量对象之后创建的,作用域链本身包含变量对象。作用域链用来解析对象。就是函数参数在定义的时候没找到相对应的参数,就会往上一层作用域去找。
-
确定this指向:很多情况
(2)执行阶段 -
执行变量赋值,代码执行
(3)回收阶段 -
执行上下文出栈,等待虚拟机回收