为什么在定义导出属性之前调用module.exports仍然有效?

我有这个代码:

var config = module.exports = {}; config.foo = {...}; 

这工作发现,但我想了解为什么。

我觉得我可以把我的头围绕下面的实现,因为它似乎更有意义导出configuration,而不是设置configuration等​​于module.exports。

 var config = {}; config.foo = {...}; module.exports = config; 

有人可以解释一下吗?

 var config = module.exports = {}; 

相当于

 var config = (module.exports = {}); 

 module.exports = {}; var config = module.exports; 

这里导出的值是{} 。 由于configmodule.exports只是对同一个对象的引用,所以foo属性仍然可以通过variablesmodule.exportsconfig添加到该对象中。