Javascript Firefox、Chrome、Safari、IE等的js递归限制是什么?

Javascript Firefox、Chrome、Safari、IE等的js递归限制是什么?,javascript,recursion,Javascript,Recursion,我有一些Javascript代码,它使用了相当深的递归,我想知道各种浏览器中的递归限制是什么(即“递归过多”错误将发生的点) 有人按版本对此有实数吗?: Internet Explorer 7:1789 火狐3:3000 铬1:21837 歌剧9.62:10000 狩猎3.2:500 在不同的浏览器和操作系统上还有更多的数据 我创建了一个Browserscope测试来获取更多数据 更新: 以上结果现已过时,但已更新: IE 11:12064 Firefox 65:20614 铬72:964

我有一些Javascript代码,它使用了相当深的递归,我想知道各种浏览器中的递归限制是什么(即“递归过多”错误将发生的点)

有人按版本对此有实数吗?

  • Internet Explorer 7:1789
  • 火狐3:3000
  • 铬1:21837
  • 歌剧9.62:10000
  • 狩猎3.2:500
在不同的浏览器和操作系统上还有更多的数据

我创建了一个Browserscope测试来获取更多数据

更新: 以上结果现已过时,但已更新:

  • IE 11:12064
  • Firefox 65:20614
  • 铬72:9643
  • 歌剧院57:9638
  • 狩猎12:32035

为了补充这里的答案,这也取决于递归中涉及的函数。例如,只需向函数添加几个参数即可更改结果:

var i=0;
function inc() {
    i++;
    inc();
}
inc();
给我20923,但是

var i=0;
function inc(j, k, l) {
    i++;
    inc(l, k, j);
}
inc(1, 2, 3);
报告13949(在Chromium 39的控制台中测试)。Firefox34分别给出了25085和13572

在zero参数
inc()
的主体周围添加try/catch块,Chromium和Firefox分别获得11413帧和13161帧。有3个参数和try/catch块,Chrome为8967,Firefox为7517


我从中得到的启示是,在浏览器中工作在堆栈深度附近的应用程序可能只能根据与应用程序中使用的函数相似的函数的经验测量来确定这一点。

在快速阅读了这篇文章后,我将其组合在一起:@districe Nice work。我为这个问题做了一个浏览器,如果我们能让很多人来运行测试,我们可以通过浏览器和操作系统得到最新的重复使用限制表。我的阅读理解技能需要更多的工作。。。完全跳过了您已经进行Browserscope测试的部分。我使用了一些浏览器运行它,令人惊讶的是Chrome有最低的限制!哦,一位同事担心几百次递归迭代(wat),因此我对发现真相很感兴趣。我现在就做了,并编辑了旧的答案来添加它。我使用了你的代码进行测试。谢谢你运行它!到2019年,这是否仍然适用?堆栈帧的大小(可能在堆栈上分配了局部变量)决定了可以分配多少堆栈帧(假设固定的分配空间,这取决于操作系统和/或浏览器——如果有可扩展的分配算法,几乎可以永远分配深堆栈)。您总是可以使用可扩展存储(如对象或数组)来模拟堆栈,以实现数论有时需要的真正深层递归。@DavidSpitter事实上,甚至有自动解决方案,如!