在搞清楚 exports
和 module.exports
之前, 要先搞懂这样一道面试题
var a = 1;
var b = a;
a = 2;
b = ? // b 显然是 1
var a = { a: 1 };
var b = a;
a = 2;
b = ? // { a: 1 }
无非就是基本类型
和引用类型
老生常谈的问题了. 如果这明白了, 那么 exports
和 module.exports
就是差不多了.
实际上 exports
和 module.exports
是指向统一对象的.
// modele是 node 的内置对象
module.exports = {};
const exports = module.exports;
虽然我的模块最后一步是 module.exports = {...}
实际上 node
最后会在你的代码块上做封装的
// 外面这层函数是 node 给我们包装的额
function(module, exports, require) {
module.exports = {a: 1}
}
function require(path) {
...// 示意代码 经过一系列计算找到那个 module
return module.exports
}
可以看到 require
得到的东西实际上就是 module.exports
的值.
// 这两种方式是等效的
exports.a = {a: 1}
module.exports.a = {a: 1}
exports = 1 // 这样导出 require 得到的是 {}
exports = { a: 1 } // 这样导出 require 得到的是 {}
不确定, 搞不清的 module.exports
准没错!!