module表示一个文件模块,每个文件等价于这么一个对象:module = { exports: {} }文件内部的module即此module对象,而exports即此module.exports,也就是说相当于额外定义一个变量var exports = module.exports,当你修改了module.exports实际上就已经覆盖了module对外的导出,而之后对exports就没用了。相当于:var module = { exports: {}, }; var exports = module.exports; module.exports = 'something' exports.name = function() {}你在别的文件require时就是在导入这个module.exports对象。// 假设这个require函数就是导入 function require(fileName) { var module = { exports: {}, }; var exports = module.exports; module.exports = 'something' exports.name = function() {} return module.exports; } var obj = require('./xxx.js') console.log(obj) // obj is ???差不多类似于这样的代码,你可以把书中的代码用webpack编译下看看最终输出就理解了然后是你划线处的结果不同的说法,我猜测是想说明module.exports.name和exports.name分别指向两个函数定义,虽然这两个函数的逻辑完全一致,但后者会覆盖前者。js的Function有个name属性用来输出函数名,假设我们把代码改成// 假设此文件叫test.js module.exports.name = function name1() { } exports.name = function name2() { }那么当我们var obj = require('./test.js') // obj.name即导出的name函数 console.log(obj.name.name) // 这里将打印name2
module
表示一个文件模块,每个文件等价于这么一个对象:文件内部的
module
即此module
对象,而exports
即此module.exports
,也就是说相当于额外定义一个变量var exports = module.exports
,当你修改了module.exports
实际上就已经覆盖了module
对外的导出,而之后对exports
就没用了。相当于:
你在别的文件
require
时就是在导入这个module.exports
对象。差不多类似于这样的代码,你可以把书中的代码用

webpack
编译下看看最终输出就理解了然后是你划线处的结果不同的说法,我猜测是想说明
module.exports.name
和exports.name
分别指向两个函数定义,虽然这两个函数的逻辑完全一致,但后者会覆盖前者。js
的Function
有个name
属性用来输出函数名,假设我们把代码改成那么当我们