执行上下文和执行栈
提问
- 什么是执行上下文
- 什么是执行栈
执行上下文
执行上下文就是当前 JavaScript
代码被解析和执行时所在环境的抽象概念, JavaScript
中运行任何的代码都是在执行上下文中运行。
类型
全局执行上下文
最基础的执行上下文,不在任何函数中的代码都位于全局执行上下中。 全局执行上下文有两个特性:1. 创建一个全局对象,如 window;2. 将this指向这个全局对象。 一个程序只能有一个全局上下文。
函数执行上下文
每次调用函数时,都会为该函数创建一个新的执行上下文。 每个函数都拥有自己的执行上下文,但只有被调用时才会被创建。
eval函数执行上下文
运行在eval函数里中的代码有自己的执行上下文
生命周期
创建阶段
- 创建变量对象
- 创建作用域链
- 确定this指向
执行阶段
回收阶段
执行栈
执行栈指 执行上下文栈(Execute Context Stack)。
执行栈 是一个存储函数调用的栈结构,遵循 先进后出 的规则。
- javascript 执行在单线程中,所有代码都是排队执行
- 执行全局代码时,创建全局执行上下文并压入执行栈的顶部
- 每当进入一个函数的执行就创建一个函数执行上下文,并压入执行栈的顶部,当前函数执行完后,当前函数的执行上下文出栈,等待垃圾回收
- 浏览器的JS引擎总是访问执行栈顶部的执行上下文
- 全局执行上下文总是只有一个,它在浏览器关闭时出栈。