在nodejs中常常会使用require()加载模块,为了使得文件模块化,将其的变量与方法提供给别的模块使用,就会使用到exports与module.exports,可是如何区分它们呢? 在此简单的记录一下。
require()返回的是module.exports指向的内容而不是exports的,我们将两个变量分别赋予新的内存地址,以此来进行观察:
test.js:
module.exports = function(){
console.log('I\'m module.exports')
}
exports = function(){
console.log('I\'m exports')
}
通过var a = require('./test')()
即可看到打印的函数为module.exports,因此可以确定exports是module.exports的一个指针,不清楚指针的具体内容的接着往下看。
假设有两个变量,var a={name:'name1}, var b = a;
,b指向a的内存区域,如果执行b.name='name2'
,我们通过打印a.name可以看到其值也为name2,这就说明两个变量共同拥有一块内存区域,并且可以共同对区域进行修改。
可如果我们执行a = {}
或者b = {}
之后,两个变量就各自管理自己的内存空间了,不再有关联,所以在nodejs中两者一共有几种用法: