为什么`varexports = module.exports = {};`有效,而`letexports = module.exports = {};无效?

Moh*_*waj 2 javascript node.js express ecmascript-6

在我的项目的代码优化期间,我用替换了所有varkeyword 实例,let因为我认为没有特殊用途var。我在所有文件中都执行了“查找并替换”操作。

在某些自定义模块中,我使用了以下语句:

var exports = module.exports = {};
Run Code Online (Sandbox Code Playgroud)

效果很好。

现在,将其替换为后let,它变为:

let exports = module.exports = {};
Run Code Online (Sandbox Code Playgroud)

现在无法正常工作并出现错误

语法错误:标识符'exports'已经被声明

尽管我可以使用var并避免这个问题,但我仍然想知道背后的原因是什么。

编辑:我没有let exports = <something>;在同一模块文件中的任何地方使用过。所以这是我声明exports变量的唯一语句。

Hen*_*eng 5

原因是因为exports已经在Nodejs模块系统中初始化。

https://nodejs.org/api/modules.html#modules_module_exports

module.exports模块加载时该对象存在。由于let是特定于范围的,因此可以防止您限制范围。 const也会失败。

  • 因为`var`并不关心是否已经声明了某些东西,但是`let`可以(大多数情况下)。 (2认同)