Javascript 在node js中的多个文件之间共享变量

Javascript 在node js中的多个文件之间共享变量,javascript,Javascript,在index.js中 设a=[] const ab = function(){ a.push(1); console.log("b",a);} module.exports = { a:a, ab:ab }; # 在main.js中 var lo = require("./a") console.log(lo.a); lo.ab(); console.log(lo.a); 当我在空数组中运行main.js时,第一个console.log是空的,但第二个console.log是[1]。我的问

在index.js中

设a=[]

const ab = function(){
a.push(1);
 console.log("b",a);}
module.exports = {
a:a,
ab:ab
};
# 在main.js中

var lo = require("./a")
console.log(lo.a);
lo.ab();
console.log(lo.a);
当我在空数组中运行main.js时,第一个console.log是空的,但第二个console.log是[1]。我的问题是,当我们导入时,它是指index.js中的,还是会给出index.js中的副本

如果我稍微将index.js更改为

let a=[];

const ab = function(){
a=[];
a.push(1);
console.log("b",a);}
module.exports = {
a:a,
ab:ab
};
然后输出为[]和[]


为什么会有差异?

“a”将通过引用向您的消费者模块公开。查看详细信息。

是。导入时,“a”在index.js中被引用为“a”。在javascript中,变量总是通过引用传递,除了原语。在本例中,a是一个数组。因此,将引用相同的对象。

模块缓存与模块中的pass-by-reference无关closureJavaScript没有pass-by-reference,数组和对象是pass-by“reference的副本”,原语是pass-by-value我的错误。如果是这样的话,当我在index.js中将index.js改为低于favorite时,让a=[];const ab=function(){a=[];a.push(1);console.log(“b”,a);}module.exports={a:a,ab:ab};那么输出是[],[]这个答案可能会让您感兴趣:如果它引用index.js中的a,那么在第二种情况下,它也应该打印[]和[1],但得到[],[]。