VSCode本身不调用全局变量,仅支持在调试时查看、修改或通过Debug Console执行表达式访问(如globalThis、process);能否成功取决于作用域、变量可写性及运行时限制。直接说结论:VSCode 本身不“调用”全局变量,它只是让你在调试时**查看、修改、执行表达式访问**全局变量(如
globalThis、process、global、window(仅 Electron))。能否成功,取决于你是否停在可访问该变量的作用域、变量是否被引擎优化掉、以及 Node.js 运行时是否允许写入。globalThis.myFlag 没反应?常见现象是输入后回车,控制台没输出、也没报错,变量也没变——这不是语法问题,而是执行上下文或可写性限制:
globalThis.myFlag 是读取操作,没赋值就不会改值;要改必须写 globalThis.myFlag = true
myFlag 不存在,赋值会创建它;但如果目标属性是 Object.defineProperty(globalThis, 'myFlag', { writable: false }),就会静默失败(Node.js 中极少这么设,但第三方库可能)process.env 是只读副本,直接 process.env.NODE_ENV = 'test' 不生效,必须改 launch.json 的 env 字段并重启调试会话__filename、__dirname)是模块级常量,无法在 Debug Console 中重赋值关键不是“能不能输”,而是“在哪输、输什么、有没有副作用”:
setTimeout 回调中,而不是某个深度嵌套的函数内部(虽然 globalThis 总是可访问,但作用域链不影响它)globalThis 而非 global 或 window:前者是标准跨环境全局对象,Node.js 和现代浏览器都支持;global 在 Node.js 中存在但不推荐;window 在纯 Node.js 环境里是 undefined
globalThis?.config 再赋值,避免 Cannot set property 'xxx' of undefined
const 声明的顶层变量(如 const API_URL = ''),Debug Console 直接赋值会报错;可尝试 eval("API_URL = 'new-url'")(仅限 Node.js 调试,且需调试器启用 eval 支持,默认开启)process 或 globalThis?Variables 面板默认只显示当前作用域的局部变量和闭包变量,process、globalThis 这类全局对象不会自动展开。但它们在 Debug Console 中完全可用:
Object.keys(globalThis) 可列出所有全局属性(含 process、console、require 等)process.argv 或 process.pid 可即时查看运行时参数和进程 IDglobalThis.DEBUG_MODE 或 process.memoryUsage().heapUsed
process.env)在 Variables 面板里显示为只读对象,但在 Debug Console 中仍可通过 process.env 对象本身读取,只是不能改globalThis.IS_DEV,但某个模块在启动时就根据旧值做了分支逻辑,那部分不会重执行)**。