[英]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.