javascript - Node.js 将变量传递给模块 vs 将变量传递给每个模块函数

标签 javascript node.js

我正在学习 node.js 并且感兴趣的是以下两种情况之间有什么区别。 IE。我有一些需要在许多模块和子模块中传递的变量 myvar(例如数据库连接或常量字符串“test”)。

第一种情况。 创建接受该变量作为参数的模块:

子模块.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 mans 中说“模块在第一次加载后被缓存”。我不明白这个模块是否被缓存。

另一种情况: myvar 可以作为参数传递给模块函数。所以代码看起来像:

子模块.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()

它会输出:这是一个函数!

但是您不会再次运行 a、b 和第一个日志。

将所有未导出的语句视为该对象的私有(private)静态变量。

这是另一个完整的示例:

app.js

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

示例.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

这有什么帮助吗?

关于javascript - Node.js 将变量传递给模块 vs 将变量传递给每个模块函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833420/

相关文章:

javascript - 用 '.' 填充整个主体的 jQuery 代码

javascript - 什么决定了 'bot.dialog' 何时传递到 Microsoft Bot Framework 中 waterfall 的下一个函数? ( Node .js)

php - 我可以阻止 Aptana 的 PDT 插件干扰我的 Javascript 编辑吗

node.js - npm 私有(private)模块错误

node.js - NodeJS 流和过早结束

node.js - grunt 命令如何工作?

java - 文本到 JSON 格式

javascript - 如何使用循环在单击时将克隆的 html 元素附加到父元素?

node.js - 将图像与 Node 合并

javascript - 在急切加载期间,错误 : Tried to select attributes using Sequelize. 强制转换或 Sequelize.fn 未指定结果别名