我们在模块化开辟中,必需会用到exports/module.exports这两个玩意导出变量或许函数。由于模块化开辟中的每一个模块都有自身的模块作用域。
比方:
//a.js var foo = '苏小猫'
//b.js console.log(foo)
我们在b.js中是没办法接见到a.js中的foo变量,所以b.js输出的是“undefine”。假如我们想在b.js模块中接见a.js中的foo变量,我们必需在a.js顶用exports或许module.exports导出foo变量。
比方
//a.js var foo = '苏小猫'; module.exports = foo;
//b.js var foo = require('./b.js'); console.log(foo);
exports跟module.expors的关联和区分?
在开辟中,我们很纠结究竟用exports照样module.exports,实在exports跟module.exports就是一个玩意,exports只是module.exports的一个援用。exports跟module.exports是等价的。我们能够在node里测试一下。
每一个模块终究返回的照样return module.exports;
在我们寻常的明白中导出单个变量或许单个函数就用module.exports;
module.exports = function(){ console.log("在你内心种点Bnum") } //我们require以后就会获得一个[Function]
导出多个变量就用exports;
exports.name = "苏小猫" exports.tree = function(){ console.log("在你内心种点Bnum") } //我们require以后就会获得一个对象{name:"苏小猫",tree:[Function]}
exports和module.exports自身就是一个空对象,exports.xxx就等于在一个对象内里增加东西。
为何module.exports导出的是单个?
由于它本来是一个空对象,module.exports=xxx。如今你从新给它赋值了,所以它只导出这个xxx。
假如给exports(exports={})从新赋值,这时候它的意义就差别了;如今的exports,跟module.exports没有了半毛钱的关联了,exports.xxx = xxx;再往内里增加东西已不会再影响末了返回返来的return module.exports了。
看,如今age已不进入末了的return module.exports内里了。
假如还想继承用exports.xxx,那就得从新再给module.exports赋值给exports。
看,如今又见效了。
假如很纠结在开辟中究竟用很exports,照样module.exports,那就遗忘exports吧(遗忘它,我们不须要备胎,哈哈哈哈)。
一开始就是说了,exports自身就是module.exports的一个援用。exports能做的module.exports都能做。比方导出多个变量或许函数。
以上就是exports和module.expors之间有什么区分及联络?的细致内容,更多请关注ki4网别的相干文章!