exports 和 module.exports 到底怎么用

在搞清楚 exportsmodule.exports 之前, 要先搞懂这样一道面试题

var a = 1;
var b = a;
a = 2;
b = ? // b 显然是 1
var a = { a: 1 };
var b = a;
a = 2;
b = ? // { a: 1 }

无非就是基本类型引用类型老生常谈的问题了. 如果这明白了, 那么 exportsmodule.exports 就是差不多了.

实际上 exportsmodule.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 准没错!!

你可能感兴趣的:(exports 和 module.exports 到底怎么用)