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

时间:2010-05-10 18:06:54

标签: javascript recursion

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

根据版本,任何人都有这方面的实数?

2 个答案:

答案 0 :(得分:38)

Nicholas C. Zakas writes in his blog

  
      
  • Internet Explorer 7:1,789
  •   
  • Firefox 3:3,000
  •   
  • Chrome 1:21,837
  •   
  • Opera 9.62:10,000
  •   
  • Safari 3.2:500
  •   

在不同的浏览器和操作系统here上还有更多数据。

我创建了一个浏览器测试来获取更多数据。 Please run it here

更新

上述结果现已过时,但the browserscope results已更新:

  • IE 11:12,064
  • Firefox 65:20,614
  • Chrome 72:9,643
  • Opera 57:9,638
  • Safari 12:32,035

答案 1 :(得分:14)

要在此处添加答案,这还取决于递归中涉及的函数。例如,只需向函数添加一些参数即可更改结果:

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的控制台中测试)。 Firefox 34分别提供25085和13572。

在零参数inc()的主体周围添加try / catch块,在Chromium中提供11413帧,在Firefox中提供13161帧。使用3个参数和try / catch块,Chrome中为8967,Firefox中为7517。

我从中得到的结论是,在浏览器中靠近堆栈深度工作的应用程序可能只能基于类似于应用程序中使用的函数的经验测量来计算出来。