Javascript 在node js中的多个文件之间共享变量
在index.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]。我的问
设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],但得到[],[]。