[路飞]每日一答:介绍一下JS的执行上下文

219 阅读1分钟

介绍一下JS的执行上下文

一.什么是执行上下文

1. 执行上下文的三种情况

  • 全局执行上下文
  • 函数执行上下文
  • eval执行上下文 (已废弃)
1.1 全局执行上下文

首次执行代码的默认环境。全局执行上下文只有一个,在客户端中一般由浏览器创建,也就是我们熟知的window对象,我们能通过this直接访问到它。

在浏览器中打印this:

image.png

1.2 函数上下文

函数执行上下文可存在无数个,每当一个函数被调用时都会创建一个函数上下文。同一个函数被多次调用,都会创建一个新的上下文。

当多个函数嵌套调用的时候会产生多个函数上下文,JS为单线程一次只能执行一个函数的调用,很多个执行上下文之间的关联和管理是通过执行栈进行的。

2.执行栈

执行栈是一个栈,所谓栈,就一定遵守后进先出的原则。在最开始全局上下文会被压入栈中,每当一个函数即将执行,这个函数的上下文会被压入栈中,当函数的生命周期结束的时候,上下文会被栈弹出。所以全局上下文会一直在栈底,当前执行的上下文会在栈顶。

循环调用,例如递归没有结束条件时,执行栈会被一直压入当前执行函数的上下文,最后造成溢出。