限制 NodeJS 中的递归深度

Limiting Recursion Depth in NodeJS

除了 --stack-size 选项之外,还有其他方法可以限制 NodeJS 中递归的 深度 吗?

我知道 NodeJS 可以让您通过 --stack-size 选项控制调用堆栈的大小。即像这样的程序

const recurse = (num=0) => {
  context.num++
  recurse(++num)
}
const context = {
  num:0
}
try {
  recurse(context)
} catch(e) {
  console.log('Took ' + context.num + ' trips before bailing')
}

默认会输出类似这样的内容。

$ node so.js 
Took 12530 trips before bailing

但是,您可以使用 --stack-size 告诉节点您希望在退出之前让堆栈达到多大(以 kb 为单位)。使用更大的堆栈,你会得到更多的递归。

$ node --stack-size=5000 so.js 
Took 63935 trips before bailing

--stack-size 选项是 Node 的 V8 选项之一。您可以通过 运行 node --v8-options.

查看所有这些选项的列表

我想知道的是 NodeJS 中是否有一种方法可以通过某个特定数字显式限制递归深度。

我在这里没有具体的最终目标——我只是想了解与我使用的其他语言相比,NodeJS 有哪些工具,没有哪些工具。如果 node 没有也没关系'没有这个 - 我只是在这里学习 :)

根据我所做的研究,这似乎是不可能的。 NodeJS 存储库中的 This just opened feature request 可能有助于弄清事情的真相。