Node中exports与module.exports的区别

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'];

查看运行结果:
在这里插入图片描述

可见,使用exports不能直接定义并返回数据类型,会切断与require的联系

综上所述,得出结论:

  • exports和module.exports都可以对外开放变量或者函数,初始值为一个{ }空对象;

  • 在使用上,module.exports可以单独定义,返回数据类型,而exports只能是返回一个Object空对象.

猜你喜欢

转载自blog.csdn.net/Calla_Lj/article/details/86139443
今日推荐