将变量设置为'undefined'实际上是否释放了空间?

Fop*_*tin 3 javascript node.js

我正在寻找一种明确的方法来确保JavaScript垃圾收集器很快就能完成它的工作.

那么设置变量undefined是一种保证吗?

var foo = "something";
// do stuff with foo

foo = undefined;
// awake the Garbage Collector interest to him
Run Code Online (Sandbox Code Playgroud)

Enr*_*ski 8

理论上不,它不会被收集.内存中仍然存在对此变量的引用.它包含未定义值的事实是无关紧要的.

想象一下RAM就像一个巨大的盒子存储器.这些盒子由不同的公司(UPS,FedEX等)共享.每个盒子都有一个地址,每个公司告诉一些中央应用程序"嘿,这个地址的盒子正被我使用".因此,即使你清空或取消定义盒子,我们说UPS和那个盒子之间仍然存在1:1的连接.就像你的JS解释器告诉你的操作系统一样("嘿,我正在使用xxx的内存位置,不要把它分配给任何其他人").

它包含未定义值的事实不会释放此内存位置.您的操作系统不知道也不关心该内存位置中的内容,他知道它已分配给您的JS解释器,并且您的JS解释器将其链接到您的变量foo.

不管怎样,你不应该为JS中的垃圾收集烦恼.只要你在正确的地方创建你的变量并且不会泛滥全局对象(但即便如此我怀疑你会遇到很多问题)每个变量都会在不能自动收集时自动进行垃圾收集.用过的.

  • @FopaLéonConstantin`全局范围内的持久变量`一般来说,你根本不需要使用全局范围. (2认同)
  • @FopaLéonConstantin,你不知道也无法控制内存中未定义的空间大小,你的解释器会为你处理这个空间,并且做了很棒的工作.没有空间不是免费的.如果您对内存位置有引用,则无论内部是什么,都会使用该空间.想象一下像房子一样的记忆.市议会在某条街上为你指定了一所房子.无论您目前是否在家,这个空间已经分配. (2认同)