Node.js中的垃圾收集作用域-变量将保持设置状态多长时间

Garbage Collection Scope in Node.js - How long will variable stay set?

本文关键字:变量 设置 长时间 状态 作用域 js Node      更新时间:2024-04-05

问题是,如果在X段时间内未被更改,由另一个传递或动态变量设置的变量会被重置吗?

我查看了ECMAScript规范,对于垃圾收集的内容和时间,我仍然有点困惑。我查看了JavaScript变量的生存期,它的答案是

"如果一个标识符是可访问的(通过直接指针或闭包),那么它不应该是垃圾回收的。"

那么我做对了吗?

基本上,如果变量由另一个传递的值设置,就会发生垃圾回收。

三元运算符中呢?

我在两个不同的函数之间交替,每月使用ternary operator作为switch运行3。它会知道它在3个月前执行了condition 1并执行了condition 2吗?还是我有垃圾收集的风险,它每次都会运行condition 1

变量值在时或之后被垃圾收集,因为不再有对变量的引用。

回想一下Javascript中的数组和对象是通过引用传递的,所以如果

var a={}, b=a;

a指向的对象有两个引用:ab

a=null;

导致对象只有一个引用b,因此它不是垃圾回收的候选对象。

b=null;

现在该对象没有引用,因此它成为集合的候选对象。

就闭包而言,这同样适用于:

b=function(){
  var a={};
  return a;
};

其中b是对a曾经引用过的"封闭"对象的引用。

一旦函数完成,a就超出了作用域,不再是对对象的引用。

b在作用域中时,在之前不会对对象进行垃圾收集

b=null;

这将释放对象以进行收集。

无引用值被垃圾回收时,这取决于JavaScript引擎,通常超出您的直接控制范围。

有一些方法可以触发显式集合,但在大多数情况下很少需要。