exports与module.exports的区别
释义
1.module.exports 初始值为一个空对象 {}
2.exports 是指向的 module.exports 的引用
3.require() 返回的是 module.exports 而不是 exports
用一句话来说明就是,require能看到的只有require.exports这个对象,他是看不到exports对象的,而我们在编写模块时用到的exports对象实际上只是对module.exports的引用
概念
基本类型:包括Undefined, Null, Boolean, Number和String五种基本数据类型
引用类型:保存在内存中的对象,不能直接操作,只能通过保存在变量中的地址引用对其进行操作我们要讨论的exports和module.exports是Object类型,属于引用类型
看下面的例子来说明一下:
|
|
到这里应该可以看懂了一些,再回到Node.js中,module.exports初始的时候为{},exports也指向这个空对象
那么,如果这样:123456789exports.name = function(x){ console.log(x);};module.exports.name = fucntion(X){ console.log(x);};/* 以上两种写法是一样的效果,因为修改的是同一内存地址里的东西 */
再来看另一个例子:
|
|
上面的function是一个新的内存地址,导致exports与module.exports失去联系,而require的是module.exports这个对象,所以这个模块时导不出去的
还是另一个例子:123module.exports = function(x){ console.log(x);};
这个是可以正常导出的