为什么`var exports = module.exports = {};`工作但不是`let exports = module.exports = {};`?

时间:2017-04-14 14:21:59

标签: javascript node.js express ecmascript-6

在我的项目的代码优化期间,我正在用var替换let关键字的所有实例,因为我认为var没有特别的用途。我做了一个'查找&替换'在所有文件中执行此操作。

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

var exports = module.exports = {};

工作得很好。

现在,在用let替换后,它变为:

let exports = module.exports = {};

现在不起作用并发出错误

  

SyntaxError:标识符'exports'已经声明

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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