Node.js将variables传递给模块vs将variables传递给每个模块函数

我在学习node.js,感兴趣的是下面两种情况有什么区别。 IE我有一些variablesmyvar (如db连接或只是常量string“testing”),需要在许多模块和子模块中传递。

第一种情况。 创build模块,接受该variables作为参数:

submodule.js:

 var option , submodule = {}; submodule.func = function(){ ... var something = option; ... } module.exports = function(opts){ option = opts; return submodule; } 

module1.js:

 var option , submodule , module1 = {}; module1.func = function(){ ... submodule.func(); ... var something = option; ... } module.exports = function(opts){ option = opts; submodule = require('./submodule')(opts); return module1; } 

在这种情况下,如果在具有相同myvar值的多个模块(即2个模块)中使用子模块,子模块的module.exports函数将被调用2次。 在node.js中,它表示“模块在第一次加载后被caching”。 而我不明白的是这个模块caching或不。

另一种情况: myvar可以作为parameter passing给模块函数。 所以代码将如下所示:

submodule.js:

 function func(option){ ... var something = option; ... }; exports.func = func; 

module1.js:

 var submodule = require('./submodule'); function func(option){ ... submodule.func(option); ... var something = option; ... }; exports.func = func; 

所以问题是:这两个案件有没有区别,还是一样?

我不确定你在这里问什么,但是如果你需要传递值到你的模块,你应该确保导出接受参数的函数。 当他们说一个模块被caching时,这意味着你的模块只被初始化一次。 把你的模块想象成一个对象:

 var a = 1; var b = 2; console.log("init!"); module.exports.test = function(){ console.log("this is a function!"); } 

这里,a,b和第一个日志将只运行一次。 这是当模块被请求,然后被caching。 当你做一个

  var example = require("module") 

如果它从未被创build,它将初始化a,b,并执行日志消息。 如果它已经创build,它只会给你一个你输出的参考。 每次你打电话:

  example.test() 

它会输出: this is a function!

但是你不会得到a,b和第一个日志再次运行。

把所有的语句都看作是那个对象的私有静态variables。

这是另一个完全可行的例子:

app.js

 var s = require("./sample"); var y = require("./sample"); s.test(); y.test(); s.test(); console.log("finished"); 

sample.js

 var a = 1; var b = 2; console.log("init!"); function test() { console.log("here! " + a); a++; } exports.test = test; 

这一切输出:

 init! here! 1 here! 2 here! 3 finished 

这有帮助吗?