0
全局變量被認爲是不好的做法,但我想用它們作爲一種簡單的「單例」值。node.js:如何在匿名函數中設置全局變量?
以下包含三種不同的方法來在NodeJS中聲明全局範圍內的變量(我認爲)。函數change2()成功地將它們的值從「... one」更改爲「... two」。然而函數change3()並沒有將它們設置爲「... three」。
如何從一個匿名函數中更改全局變量的值? - 我也嘗試調用setter方法,但沒有任何效果。 bind()調用只是一個無奈的猜測。
global.v1 = 'v1: one';
var v2 = 'v2: one';
v3 = 'v3: one';
function change2() {
global.v1 = 'v1: two';
v2 = 'v2: two';
v3 = 'v3: two';
};
function change3() {
(function() {
global.v1 = 'v1: three';
v2 = 'v2: three';
v3 = 'v3: three';
}).bind({v1:v1, v2:v2, v3:v3});
};
console.log (v1, v2, v3);
change2();
console.log (v1, v2, v3);
change3();
console.log (v1, v2, v3);
輸出爲:
O:\node>node scope
v1: one v2: one v3: one
v1: two v2: two v3: two
v1: two v2: two v3: two
O:\node>
不是直接的答案,但文件「v1.js」的內容爲'module.exports = {}'對於一個簡單的單例更好。然後在你的其他模塊中簡單的require('./ v1')'。 –
在'change3()'中你永遠不會執行內部函數。 '.bind()'只是返回一個新的函數,但你永遠不會真正調用它。 – jfriend00
謝謝@ jfriend00發現。用'()'代替'.bind(...)'觸發了調用,設置了「... 3」。 –