簡體   English   中英

Node.js將變量傳遞給模塊vs將變量傳遞給每個模塊函數

[英]Node.js pass variable to module vs pass variable to every module function

我正在學習node.js,感興趣的是以下兩種情況之間是否有區別。 IE瀏覽器我有一些變量myvar (如數據庫連接或只是常量字符串“測試”),需要在許多模塊和子模塊中傳遞。

第一種情況。 創建將該變量作為參數接受的模塊:

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

這有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM