控制器转到可执行代码时,会进入一个执行上下文,可理解为当前代码的执行环境,它会形成一个作用域。
JS中的运行环境大概包括三种情况:
- 全局环境:JavaScript代码运行起来会首先进入该环境
- 函数环境:当函数被调用执行时,会进入当前函数中执行代码
- eval(不建议使用,可忽略)
JS引擎以栈的方式来处理js程序中的多个执行上下文,这个栈称为函数调用栈。栈底永远是全局上下文,栈顶是正在执行的上下文。
生成执行上下文 → 放入栈中 → 栈顶的执行上下文执行完毕后 → 自动出栈
执行上下文可以理解为函数执行的环境,每一个函数执行时,都会给对应的函数创建这样一个执行环境。
全局上下文在浏览器窗口关闭后出栈。
注意:函数中,遇到return能直接终止可执行代码的执行,因此会直接将当前上下文弹出栈。
结论:
- 单线程
- 同步执行,只有栈顶的上下文处于执行中,其他上下文需要等待
- 全局上下文只有唯一的一个,它在浏览器关闭时出栈
- 函数的执行上下文的个数没有限制
- 每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。