You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中使用window创建动态变量报错‘window is not defined’的原因

为什么在Node.js中使用window会出现"ReferenceError: window is not defined"?

这个问题其实很常见——你混淆了浏览器环境和Node.js环境的全局对象啦!

错误原因

  • window是浏览器专属的全局对象:在浏览器里,window作为顶级全局容器,所有全局变量、浏览器API都会挂载到它上面,所以你写的那段代码在浏览器控制台里运行完全没问题。
  • Node.js的全局对象不是window:Node.js是服务器端的JS运行环境,它的全局对象早期是global(适用于CommonJS模块),现在ES模块(在package.json中设置"type": "module"时)推荐使用globalThis来统一跨环境的全局对象访问。直接引用window的话,Node.js的运行时根本找不到这个变量,所以会抛出ReferenceError。

解决方法

方法1:使用Node.js的全局对象

如果你的代码是CommonJS模块(默认的.js文件),可以用global替代window:

for (let i = 0; i < templates.length; i++) {
  global["t" + i] = i;
}

如果是ES模块,推荐用globalThis(它同时兼容浏览器和Node.js环境):

for (let i = 0; i < templates.length; i++) {
  globalThis["t" + i] = i;
}

方法2:更推荐的做法——避免污染全局

往全局对象上添加变量很容易造成命名冲突,是不太好的实践。更合适的方式是用一个普通对象来存储这些动态变量:

const templates = [/* 你的模板数组内容 */];
// 创建一个专门的对象来存储动态变量
const templateVars = {};

for (let i = 0; i < templates.length; i++) {
  templateVars[`t${i}`] = i;
}

// 之后可以这样访问:templateVars.t0、templateVars.t1...

这种方式既避免了全局污染,也更清晰可控。

内容的提问来源于stack exchange,提问作者Shekoofeh Dezhahanj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:52:39