Javascript 如何防止Node.js对关键变量进行垃圾收集(GC)

Javascript 如何防止Node.js对关键变量进行垃圾收集(GC),javascript,node.js,garbage-collection,Javascript,Node.js,Garbage Collection,在垃圾收集期间,在Node.js中清除变量的属性。然而,我不希望这种情况发生。我已经找到了解决方案,比如将变量保存到数据库或文件中。然而,我不喜欢这种方法。我只需要一个关键部分或关键变量,以防止垃圾收集 例如,使用以下代码: function a() { var b; } c = new a(); 如何保护变量c不被垃圾回收 随着时间的推移,c.b或c被删除。。。在我的例子中,c.b被删除 请帮帮我。。。我知道我的英语很差,但我非常需要你的帮助 我不确定,但是。您没有为c指定作用域,

在垃圾收集期间,在Node.js中清除变量的属性。然而,我不希望这种情况发生。我已经找到了解决方案,比如将变量保存到数据库或文件中。然而,我不喜欢这种方法。我只需要一个关键部分或关键变量,以防止垃圾收集

例如,使用以下代码:

function a() {
  var b; 
}

c = new a(); 
如何保护变量
c
不被垃圾回收

随着时间的推移,
c.b
c
被删除。。。在我的例子中,
c.b
被删除


请帮帮我。。。我知道我的英语很差,但我非常需要你的帮助

我不确定,但是。您没有为c指定作用域,因此它进入了最上层的作用域,因此被垃圾收集。在当前范围内定义c:

let c;
function doSomething() {
   c = {b: 1, d: 2};
}

doSomething();

希望有帮助。

需要注意的是,在代码中,b和d不是a上的属性。它们是函数a内部作用域的局部变量,不使用,因此会被清除

如果将其更改为:

function a() {
  this.b = 1;
  this.d = 2;
}

var c = new a();

console.log(c.b) //1
console.log(c.d) //2
然后您可以引用c.b和c.d,只要您有对c的引用,就不应该收集它。如果你把它作为var b,d;不能从函数外部引用这些函数

与之相比:

function a() {
  var b = 1;
  var d = 2;
}

var c = new a();

console.log(c.b) //undefined
console.log(c.d) //undefined

你想解决什么问题?。。如果你不想垃圾收集,就把它添加到一些全局文件中。真的吗?然而,在年,他的变量被清除了。是的,真的。不确定那个人在全局丢失时遇到了什么问题,当然不是node.js的工作方式,。。我有一些网站/网络应用程序,这些网站/网络应用程序在启动时会加载全局的,并且永远不会更改,它们会存在数周/数月。尽管如此,我不使用全局对象来存储全局的,我发现使用另一个模块会更结构化。例如,我可能有一个单元调用init.js。然后我需要从任何地方得到这个,我需要从这里得到全球的。哦,真的吗?如果你的帮助是真的,我认为那篇文章太旧了,node.js已经更新了。非常感谢。我要试试看!非常感谢~~!!!!!!哦,谢谢你。你的意见和正文中的答复类似吗?您的意思是我需要使用“全局”或“let”声明变量吗?然而,在中,他的变量被清除。哦,真的谢谢!我不能这么想。在我的例子中,我在“函数a”中声明init函数。所以它做得很好。然而,根据您的意见,我理解为什么在init函数中没有使用的另一个变量被认为是“未定义的”。谢谢