Node.js将变量传递给模块vs将变量传递给每个模块函数
Node.js pass variable to module vs pass variable to every module function
我正在学习node.js,对以下两种情况是否有区别感兴趣。I.E.,我有一些变量myvar
(如db连接或只是常量字符串"测试")需要在许多模块和子模块中通过。
第一个案例。创建接受该变量作为参数的模块:
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中,它说"模块在第一次加载后被缓存"。我不明白这个模块是否缓存。
的另一个例子:myvar
可以作为参数传递给模块函数。所以代码看起来像:
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;
问题是:这两种情况有什么不同还是相同?
我不太确定您在这里问什么,但是如果您需要将值传递到模块中,则应确保导出接受参数的函数。当他们说一个模块被缓存时,这意味着你的模块只被初始化一次。把你的模块想象成一个对象:
var a = 1;
var b = 2;
console.log("init!");
module.exports.test = function(){
console.log("this is a function!");
}
这里,a、b和第一个日志将只运行一次。这是模块被请求的时候,然后被缓存。当你做
var example = require("module")
如果它从未被创建,它将初始化a, b,并做日志消息。如果它已经创建了,它只会给你一个导出的引用。每次呼叫:
example.test()
它将输出:this is a function!
但是你不会得到a, b和第一个日志再次运行。
将所有未导出的语句视为该对象的私有静态变量。
下面是另一个完整的工作示例: 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
这有帮助吗?
相关文章:
- 正在更改node.js模块变量
- AngularJS在不使用变量的情况下将服务注入模块中,这样就可以缩小它
- JavaScript:访问继承子模块中的“封闭”变量
- 将 NodeJS 模块范围变量作为对象访问
- 从导出的模块返回变量,并在另一个文件(NodeJS)中使用它
- 带有全局变量、咖啡脚本和回调的模块 CSV
- 将变量传递给 Javascript 模块化模式方法
- 使用模块模式时访问父作用域中的变量
- Node.js-模块导出静态变量
- 单元测试节点模块与mocha,模块变量行为怪异
- 如何通过名称(从模块本身)访问ES6模块变量
- 如何在模块之间更新此变量的值
- 请求节点模块变量范围
- 访问 JavaScript 模块中的模块变量
- 是否可以在 Node.js 中为模块变量定义 SET 函数
- 如何在表达式中引用模块变量
- 构造NodeJS模块-变量和方法
- 什么's是在nodejs中定义模块变量的最佳方式
- 模块化gulp / node.js,调用模块变量
- 将节点模块变量注入作用域