在我的项目的代码优化期间,我正在用var
替换let
关键字的所有实例,因为我认为var
没有特别的用途。我做了一个'查找&替换'在所有文件中执行此操作。
在一些自定义模块中,我使用了以下语句:
var exports = module.exports = {};
工作得很好。
现在,在用let
替换后,它变为:
let exports = module.exports = {};
现在不起作用并发出错误
SyntaxError:标识符'exports'已经声明
虽然我可以使用var
并避免这个问题,但我仍然想知道这背后的原因是什么。
编辑:我没有在同一模块文件中的任何位置使用let exports = <something>;
。所以这是我声明exports
变量的唯一声明。
答案 0 :(得分:3)
原因是因为exports
已在Nodejs模块系统中初始化。
https://nodejs.org/api/modules.html#modules_module_exports
当模块加载时,对象存在,module.exports
。由于let
是特定于范围的,因此阻止您限制范围。 const
也会失败。