Node.js里exports和module.exports的区别

很早之前我就对exportsmodule.exports之间的区别产生了好奇,因为用起来感觉不出什么区别但却又是不同的用法。实际上,exportsmodule.exports的引用

换句话说,模块最终返回的是module.exports给调用者而不是exports

用图举例说明,一开始exportsmodule.exports一样指向一个空对象
在这里插入图片描述

如果我们想对外暴露一个函数,例如:

function foo(){
	console.log('hello world');
}

module.exports.foo = foo;

那么这个时候就变成了下图:
在这里插入图片描述

因为exportsmodule.exports的引用,所以到现在为止,这两个所代表的都还是同一个对象。

但是,如果当我让module.exprots指向其他的对象,那么情况就不一样了,例如:

function foo(){
	console.log('hello world');
}

module.exports.foo = foo;

let myObject = {};
module.exports = myObject; 

这段代码相当于在之前的代码之后为module.exports重新赋了值。那么现在,两个模块的关系如下图:

在这里插入图片描述

可以看出这时exportsmodule.exports指向了不同的对象,这也说明了exports就是module.exports的引用。

猜你喜欢

转载自blog.csdn.net/hjc256/article/details/86144087