Node.js 面试题
目录

请解释 module.exports 和 exports 的区别和联系

· 约 3 分钟读完 · 第 8 / 377 章

推荐答案

module.exports 和 exports 是 Node.js 中用于导出模块的两个对象。它们的区别和联系如下:

  • module.exports 是模块导出的真正对象,最终导出的内容是由 module.exports 决定的。
  • exports 是 module.exports 的一个引用,初始时指向同一个对象。你可以通过 exports 添加属性或方法,但如果直接给 exports 赋值一个新的对象,它将不再指向 module.exports,因此不会影响模块的导出。

本题详细解读

module.exports 的作用

module.exports 是 Node.js 模块系统中用于导出的对象。当你使用 require 导入一个模块时,实际上导入的是 module.exports 所指向的对象。你可以直接给 module.exports 赋值一个对象、函数、类等,导出的内容将完全由 module.exports 决定。

exports 的作用

exports 是 module.exports 的一个引用。在模块的初始状态下,exports 和 module.exports 指向同一个空对象 {}。你可以通过 exports 添加属性或方法,这些属性和方法会被添加到 module.exports 中。

上面的代码等同于:

区别与联系

  • 联系:exports 是 module.exports 的一个引用,初始时它们指向同一个对象。
  • 区别:如果你直接给 exports 赋值一个新的对象,exports 将不再指向 module.exports,因此不会影响模块的导出。而 module.exports 始终是模块导出的最终对象。

总结

  • 使用 module.exports 可以导出任何类型的对象、函数、类等。
  • 使用 exports 可以方便地添加属性和方法,但不能直接赋值一个新的对象。
  • 如果你需要导出一个新的对象或函数,应该直接使用 module.exports。