• 首页
  • 博客
  • 标签
  • 联系
街街的脏书包
  • 首页
  • 博客
  • 标签
  • 联系
联系

Copyright © 2026 - odaneo.com 保留所有权利

JavaScript 全局与函数执行上下文详解

前端JavaScript2026-01-29 01:21

全局上下文(Global Execution Context)

JS 代码开始执行时默认创建的执行上下文。它对应整个脚本或浏览器中的全局环境(浏览器中是 window 对象)。在不同宿主环境中,全局对象不同:浏览器里是 window(或 globalThis),Node.js 中是 global。全局上下文只有一个,且在程序结束时才销毁。所有全局变量和函数都在这里创建。

函数上下文(Function Execution Context)

每次调用函数时,都会为该函数创建一个新的执行上下文。该上下文包含函数的参数、局部变量、作用域链等信息。AO(活动对象)是函数执行上下文的变量环境的一种表现,实际由词法环境(Lexical Environment)实现。函数执行完毕后,这个上下文会从执行上下文栈中弹出,释放资源。
举个例子:
function foo(a) { var b = 2; function c() {} var d = function() {}; b = 3; } foo(1);
在进入执行上下文后,这时候的 AO 是:
AO = { arguments: { 0: 1, length: 1 }, a: 1, b: undefined, c: reference to function c(){}, d: undefined }

关系

全局上下文是所有执行上下文的基础。函数上下文可以嵌套,形成执行上下文栈。当前执行的上下文始终在栈顶。var 声明的变量在初始化阶段会被自动声明(变量提升),并且默认初始化为 undefined,所以访问时不会报错,只是值为 undefined。let 和 const 也会被声明,但它们进入了暂时性死区(TDZ),处于一种未初始化的状态 uninitialized,在声明之前访问会报 ReferenceError,它们不会被初始化为 undefined。const 必须在声明时立即初始化,否则会报错。