【发布时间】:2021-12-30 06:05:27
【问题描述】:
在 nodejs 中,我尝试更新从另一个文件导出的全局变量并再次检查结果。原文件和导入文件中的变量值不同。
我运行文件 test.js 并检查结果。 DataCommon.js 和 test.js 中 gDataChange 的结果是不同的,虽然是同一个变量。
在 DataCommon.js 中,我导出了 gDataChange 变量
let gDataChange = [];
function printArray()
{
console.log('DataCommon.js call ', gDataChange);
}
function setArray(lArray)
{
gDataChange = [...lArray];
}
module.exports = {
gDataChange,
printArray,
setArray
}
在test.js中,我将一些数据push到全局数组中,并调用函数setArray来改变它。
var { gDataChange, printArray, setArray} = require('../../res/DataCommon.js');
if (!gDataChange.length)
{
gDataChange.push(1);
gDataChange.push(2);
gDataChange.push(1);
gDataChange.push(3);
}
function testGlobalVar() {
let newData = [...gDataChange];
newData = newData.filter((number)=>{
return number != 1;
});
setArray(newData);
}
testGlobalVar();
console.log('test.js call ', gDataChange);
printArray();
setTimeout(() => {
console.log(gDataChange);
}, 10000);
如果我使用array.splice(),2个文件的gDataChange是相同的。但是如果我使用 array.filter() 并像上面那样重新分配数组,则 2 文件的 gDataChange 是不同的。 当我用 array.filter() 重新分配时,我不确定 gDataChange 是否被创建到新的,因为在这种情况下我无法检查变量的地址。
【问题讨论】:
标签: javascript node.js arrays module javascript-objects