您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用node.js进行垃圾回收

使用node.js进行垃圾回收

简单的答案:如果str没有从其他任何地方引用的值(并且str本身也没有从引用restofprogram),则function (str) { ... }返回时将无法访问它的值。

详细说明:V8编译器区分真正的 地方 ,从所谓的变量 背景 变量被关闭,由阴影捕获 语句来或eval调用

局部变量存在于堆栈中,并在函数执行完成后立即消失。

上下文变量位于分配给堆的上下文结构中。当上下文结构消失时,它们消失。这里要注意的重要一点是,来自同一作用域的上下文变量位于 结构中。让我用示例代码进行说明:

function outer () {
  var x; // real local variable
  var y; // context variable, referenced by inner1
  var z; // context variable, referenced by inner2

  function inner1 () {
    // references context 
    use(y);
  }

  function inner2 () {
    // references context 
    use(z);
  }

  function inner3 () { /* I am empty but I still capture context implicitly */ }

  return [inner1, inner2, inner3];
}

在这个例子中变量x将尽快消失outer的回报,但变量y,并z只有当将消失 inner1inner2 inner3死。发生这种情况是因为yz分配在相同的上下文结构中,并且所有三个闭包都隐式引用此上下文结构(即使inner3没有显式使用它)。

当你开始使用情况变得更加复杂 语句来, ,其在V8中包含一个隐含的语句来 语句来里面的catch子句或全局eval

function complication () {
  var x; // context variable

  function inner () { /* I am empty but I still capture context implicitly */ }

  try { } catch (e) { /* contains implicit with-statement */ }

  return inner;
}

在此示例中,x仅在inner死亡时才会消失。因为:

这迫使x成为上下文变量并inner捕获上下文,x直到上下文inner消失为止。

通常,如果您要确保给定的变量保留某个对象的时间不超过实际需要的时间,则可以通过分配给该变量轻松地 破坏链接null

Node 2022/1/1 18:16:01 有486人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶