面试题答案
一键面试exports 和 module.exports 的区别
- 本质关系:
exports
是module.exports
的一个引用。在 Node.js 的模块系统中,每个模块内部都有一个module
对象,module.exports
才是真正对外暴露的接口,而exports
是为了方便开发者而对module.exports
的一个浅拷贝。 - 赋值差异:当对
exports
进行重新赋值(如exports = {...}
)时,实际上是切断了与module.exports
的联系,新赋值的exports
不会影响到module.exports
,也就不会被外部模块正确引用。而直接对module.exports
进行赋值(如module.exports = {...}
)则可以正确地向外暴露模块接口。
示例
- 使用 exports 导出包含多个函数的模块
// mathUtils.js
exports.add = function(a, b) {
return a + b;
};
exports.subtract = function(a, b) {
return a - b;
};
- 使用 module.exports 导出包含多个函数的模块
// mathUtils.js
module.exports = {
add: function(a, b) {
return a + b;
},
subtract: function(a, b) {
return a - b;
}
};
在其他文件中引入上述模块的方式相同:
const mathUtils = require('./mathUtils');
console.log(mathUtils.add(5, 3));
console.log(mathUtils.subtract(5, 3));