什么是执行上下文、JS 有几种上下文?
题干
- 执行上下文
题解
执行上下文是当前 JS 代码被解析和执行时所在环境的抽象概念。
JS 有三种主要的执行上下文:
- 全局执行上下文(Global Execution Context):全局执行上下文是在代码开始执行时创建的,它代表了全局作用域。全局执行上下文只有一个,并且在整个代码执行过程中都存在。在全局执行上下文中,变量和函数声明会被提升,并且可以通过
this
关键字访问全局对象(如浏览器中的 window 对象)。 - 函数执行上下文(Function Execution Context):函数执行上下文是在调用函数时创建的,每当函数被调用时都会创建一个新的函数执行上下文。每个函数执行上下文都有自己的作用域,并且可以访问函数的参数、局部变量和外部作用域中的变量。函数执行上下文在函数执行完毕后会被销毁。
- eval 执行上下文(Eval Execution Context):
eval
是 JS 中的一个函数,它可以动态地执行传入的字符串代码。当使用eval
函数执行代码时,会创建一个eval
执行上下文。eval
执行上下文的行为类似于函数执行上下文,但它的作用域是在调用eval
函数的作用域中。
每个执行上下文都包含了一些重要的组成部分,如变量对象、作用域链、this 值等。变量对象用于存储变量和函数声明,作用域链用于解析变量的访问权限,this 值用于指向当前执行上下文所属的对象。
执行上下文是按照创建顺序形成的执行上下文栈(Execution Context Stack),也称为调用栈(Call Stack)。当代码执行到一个函数时,会创建一个新的函数执行上下文,并将其推入执行上下文栈中。当函数执行完毕后,对应的函数执行上下文会从栈中弹出,恢复到上一个执行上下文。