Javascript 将变量设置为';未定义';实际上是释放空间?
我正在寻找一种明确的方法来确保JavaScript垃圾收集器很快就能完成它的工作 那么,将变量设置为Javascript 将变量设置为';未定义';实际上是释放空间?,javascript,node.js,Javascript,Node.js,我正在寻找一种明确的方法来确保JavaScript垃圾收集器很快就能完成它的工作 那么,将变量设置为未定义就是一种保证吗 var foo = "something"; // do stuff with foo foo = undefined; // awake the Garbage Collector interest to him 理论上说,不,它不会被加奇收集。内存中仍有对该变量的引用。它包含未定义的值这一事实与此无关 想象一下RAM就像一个巨大的盒子仓库。这些箱子由不同的公司(UPS
未定义
就是一种保证吗
var foo = "something";
// do stuff with foo
foo = undefined;
// awake the Garbage Collector interest to him
理论上说,不,它不会被加奇收集。内存中仍有对该变量的引用。它包含未定义的值这一事实与此无关 想象一下RAM就像一个巨大的盒子仓库。这些箱子由不同的公司(UPS、联邦快递等)共享。每个盒子都有一个地址,每个公司都会告诉一些中央应用程序“嘿,这个地址的盒子正在被我使用”。因此,即使您清空或取消定义该框,UPS和该框之间仍然存在1:1的连接。同样,JS解释器告诉操作系统(“嘿,我正在使用xxx的内存位置,不要把它分配给其他任何人”) 它包含未定义的值这一事实不会释放此内存位置。您的操作系统不知道也不关心内存位置中的内容,他知道它被分配给您的JS解释器,并且您的JS解释器将它链接到您的变量foo
无论如何,您不应该为JS中的垃圾收集而烦恼。只要您在正确的位置创建变量,并且不会淹没全局对象(但即使如此,我怀疑您会遇到很多问题)每一个变量一旦不能使用就会被自动垃圾收集。请记住,即使变量被设置为未定义,它仍在内存中,并且会占用空间。GC收集该变量的最佳方法是使其超出范围。因此,最好的做法仍然是在函数或块,并将
持久性
变量放入全局范围?@FopaLéonConstantin持久性变量放入全局范围
一般来说,您根本不需要使用全局范围。好的,我知道了,变量仍然存在,但是空间是自由的?因为未定义的不会占用那么多空间?rigth?最佳实践总是在尽可能狭窄的范围内声明变量。这样你的JS引擎就知道什么时候垃圾收集它们了。@FopaLéonConstantin,你不知道也无法控制内存中未定义的空间有多少,你的解释器会帮你处理这些,并且做得非常出色。不,空间不是免费的。如果您有一个对内存位置的引用,那么不管内存中有什么,都会使用该空间。把记忆想象成房子。市议会在某条街上给你分配了一所房子。不管你现在是否在家,这个空间已经分配好了。