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

为什么for...of未声明变量在.js中可运行但.mjs中报错

两种文件运行结果差异的核心原因

差异本质是Node.js对不同后缀文件默认启用的语法模式不同:

  • 后缀为.js的文件默认采用CommonJS模块规范,默认运行在非严格模式下:非严格模式中如果直接使用未声明的变量赋值,JS会自动在全局对象上创建对应属性,不会抛出引用错误,所以代码可以正常执行。
  • 后缀为.mjs的文件默认采用ES Module规范,强制运行在严格模式下:严格模式明确禁止隐式创建全局变量,未声明的变量直接使用会直接抛出ReferenceError,这就是你运行.mjs文件报错的原因。

你尝试的解决方案是符合规范的:给for...of的循环变量添加let/const/var声明后,符合两种模式的语法要求,所以在两个环境下都可以正常运行。

内容的提问来源于stack exchange,提问作者SUDHIR KUMAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 18:24:03