Node中exports与module.exports的区别
Node.js中,为了不造成变量和函数的污染,为开发者提供了简单的模块系统. 要在一个文件模块中获取其他文件模块的内容,首先需要使用require()函数加载这个模块;在 被加载的模块中使用exports或者module.exports对象向外开放变量,函数等.
比如:
info.js
// 向外开放变量
exports.name = 'tom';
module.exports.age = 10;
module.exports.sayHello = function () {
console.log('hello')
}
demo.js
// 加载模块
var myModule = require('./info');
console.log(myModule)
// 输出模块中变量的值
console.log('name:' + myModule.name)
console.log('age:' + myModule.age)
// 调用模块的方法
myModule.sayHello()
运行结果如下:
由上可知,exports和module.exports都可以对外开放变量或者函数,那么他们之间又又什么区别呢?
答案: 虽然exports和module.exports都可以对外开放变量或者函数,但是在使用上,module.exports可以单独定义,返回数据类型,而exports只能是返回一个Object对象.
为了更好的理解exports和module.exports的区别,下面通过一个案例来演示.
test.js
// 定义一个数组
module.exports = ['name','type','age'];
demo.js
// 加载模块
var myModule = require('./test');
console.log(myModule)
// 输出模块中数组长度
console.log('length:' + myModule.length)
运行结果,如下图:
由 上结果可以看出,module.exports可以单独定义数组,并成功向外开放.
下面修改test.js中代码
// 定义一个数组
exports = ['name','type','age'];
查看运行结果: