为什么for...of未声明变量在.js中可运行但.mjs中报错
两种文件运行结果差异的核心原因
差异本质是Node.js对不同后缀文件默认启用的语法模式不同:
- 后缀为
.js的文件默认采用CommonJS模块规范,默认运行在非严格模式下:非严格模式中如果直接使用未声明的变量赋值,JS会自动在全局对象上创建对应属性,不会抛出引用错误,所以代码可以正常执行。 - 后缀为
.mjs的文件默认采用ES Module规范,强制运行在严格模式下:严格模式明确禁止隐式创建全局变量,未声明的变量直接使用会直接抛出ReferenceError,这就是你运行.mjs文件报错的原因。
你尝试的解决方案是符合规范的:给for...of的循环变量添加let/const/var声明后,符合两种模式的语法要求,所以在两个环境下都可以正常运行。
内容的提问来源于stack exchange,提问作者SUDHIR KUMAR
相关产品推荐
相关产品推荐

