如何深入理解JavaScript中的执行上下文与堆栈机制?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2368个文字,预计阅读时间需要10分钟。
执行上下文是JavaScript运行环境的核心概念,它决定了代码的执行顺序和作用域。当JavaScript代码在行时执行时,会经历以下几种情况:
- 全局代码:首次执行代码时的默认环境。- 函数代码:当执行流进入函数时,会创建一个新的执行上下文。
什么是执行上下文?
JavaScript的执行环境非常重要,当JavaScript代码在行时,会被预处理为以下情况之一:
- Global code - 首次执行代码的默认环境。
- Function code - 每当执行流程进入函数体时。
- Eval code - 要在eval函数内执行的文本。
你可以阅读大量涉及作用域的在线资料,不过为了使事情更容易理解,让我们将术语“执行上下文”视为当前代码的运行环境或作用域。接下来让我们看一个包含global和function / local上下文的代码示例。
这里没有什么特别之处,我们有一个由紫色边框表示的全局上下文,和由绿色,蓝色和橙色边框表示的3个不同的函数上下文。 只能有1个全局上下文,可以从程序中的任何其他上下文访问。
你可以拥有任意数量的函数上下文,并且每个函数调用都会创建一个新的上下文,从而创建一个私有作用域,其中无法从当前函数作用域外直接访问函数内部声明的任何内容。 在上面的示例中,函数可以访问在其当前上下文之外声明的变量,但外部上下文无法访问在其中声明的变量或函数。 为什么会这样呢? 这段代码究竟是如何处理的?
Execution Context Stack(执行上下文堆栈)
浏览器中的JavaScript解释器被实现为单个线程。 实际上这意味着在浏览器中一次只能做一件事,其他动作或事件在所谓的执行堆栈中排队。 下图是单线程堆栈的抽象视图:
我们已经知道,当浏览器首次加载脚本时,它默认进入全局上下文执行。
本文共计2368个文字,预计阅读时间需要10分钟。
执行上下文是JavaScript运行环境的核心概念,它决定了代码的执行顺序和作用域。当JavaScript代码在行时执行时,会经历以下几种情况:
- 全局代码:首次执行代码时的默认环境。- 函数代码:当执行流进入函数时,会创建一个新的执行上下文。
什么是执行上下文?
JavaScript的执行环境非常重要,当JavaScript代码在行时,会被预处理为以下情况之一:
- Global code - 首次执行代码的默认环境。
- Function code - 每当执行流程进入函数体时。
- Eval code - 要在eval函数内执行的文本。
你可以阅读大量涉及作用域的在线资料,不过为了使事情更容易理解,让我们将术语“执行上下文”视为当前代码的运行环境或作用域。接下来让我们看一个包含global和function / local上下文的代码示例。
这里没有什么特别之处,我们有一个由紫色边框表示的全局上下文,和由绿色,蓝色和橙色边框表示的3个不同的函数上下文。 只能有1个全局上下文,可以从程序中的任何其他上下文访问。
你可以拥有任意数量的函数上下文,并且每个函数调用都会创建一个新的上下文,从而创建一个私有作用域,其中无法从当前函数作用域外直接访问函数内部声明的任何内容。 在上面的示例中,函数可以访问在其当前上下文之外声明的变量,但外部上下文无法访问在其中声明的变量或函数。 为什么会这样呢? 这段代码究竟是如何处理的?
Execution Context Stack(执行上下文堆栈)
浏览器中的JavaScript解释器被实现为单个线程。 实际上这意味着在浏览器中一次只能做一件事,其他动作或事件在所谓的执行堆栈中排队。 下图是单线程堆栈的抽象视图:
我们已经知道,当浏览器首次加载脚本时,它默认进入全局上下文执行。

