Node.js 的全局执行上下文(GEC)以 global 为全局对象、this 指向 module.exports、var 声明不挂载 global、变量作用域限于模块、生命周期绑定进程,与浏览器的 window、this 指向 window、var 自动挂载等机制显著不同。

全局执行上下文(Global Execution Context,GEC)在 Node.js 环境下和浏览器有明显区别,核心在于全局对象、this 指向、变量挂载方式以及模块作用域的约束。
全局对象是 global,不是 window
Node.js 中没有 window 对象。全局执行上下文创建时,会生成一个名为 global 的全局对象,它是所有全局属性和函数的宿主。
-
global.setTimeout、global.console等都是直接挂载在global上的内置属性 - 用
var声明的全局变量(如var x = 1)不会自动成为global.x—— 这点和浏览器不同;它们只存在于当前模块的顶层作用域,不污染global - 但显式赋值给
global(如global.y = 2)或使用globalThis.y = 2,确实会让变量可被其他模块通过global.y访问(需注意模块隔离机制)
this 在模块顶层指向 module.exports
Node.js 的每个 JS 文件都被包裹在一个函数中(即 CommonJS 模块封装),因此顶层代码的 this 不指向 global,而是等价于 module.exports。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
console.log(this === module.exports); // true-
console.log(this === global); // false(非严格模式下也如此) - 只有在真正无任何函数包裹的“纯全局”环境(比如 REPL 或
node -e "console.log(this)")中,this 才指向global
变量提升仍存在,但作用域限于当前模块
和浏览器一样,var 声明会被提升,function 声明也会被提升并初始化;但 let 和 const 遵守暂时性死区(TDZ)。
-
var a = 1;在模块顶层声明 → 变量仅在该模块内可访问,不会泄漏到其他模块 - 这与浏览器中
var自动挂到window形成对比,体现了 Node.js 的模块化隔离设计 - 模块之间通信必须通过
module.exports/exports或require(),而非共享全局变量
生命周期绑定进程,非页面会话
Node.js 的 GEC 生命周期从模块加载开始,持续到整个 Node 进程退出(如调用 process.exit() 或自然结束)。
- 没有“刷新页面”的概念,所以不存在“销毁后重建 GEC”的行为
- 多次
require()同一模块时,返回的是缓存导出对象,不会重复创建 GEC - 动态
import()会为被导入模块创建独立的执行上下文,但其顶层仍遵循上述规则

















