在清除堆栈之前,是否清除了作为递归函数范围的变量?

时间:2017-09-24 14:33:08

标签: javascript recursion iteration

在我正在编写的node.js应用程序中,我想在CSV文件中迭代X行,将它们转换为JSON对象并将这些行(作为X对象的批处理)发送到CouchDB的_bulk_docs端点。

为此,我使用生成器函数来公开迭代器,然后通过递归实现迭代器(因为其中一个步骤涉及异步执行的HTTP请求)。如果我在递归函数中声明变量,那么在递归迭代完成之前是否会对这些变量进行垃圾收集?即使用以下代码:

var vals = // call generator function;
(function doIteration() {
  var x = vals.next();
  if (!x.done) {
    doAsyncFunction(x, function(res) {
      doIteration();
    });
  };
})();

我认为doIteration()函数调用完成后无需等待递归堆栈清除。那是对的吗?否则,我应该在函数之外移动x的声明吗?这似乎会导致重新分配x,这肯定会导致旧的引用值被清理。

0 个答案:

没有答案