代码之家  ›  专栏  ›  技术社区  ›  Maciek

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

  •  33
  • Maciek  · 技术社区  · 16 年前

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

    有人有关于这个的实数吗?

    2 回复  |  直到 7 年前
        1
  •  36
  •   Benoît P    7 年前

    Nicholas C. Zakas writes in his blog :

    • Internet Explorer 7:1789
    • 火狐3:3000
    • 铬1:21837
    • 歌剧9.62:10000
    • 狩猎3.2:500

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

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

    更新:

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

    • IE 11:12064
    • 火狐65:20614
    • 铬72:9643
    • 歌剧57:9638
    • 游猎12:32035
        2
  •  14
  •   jpolitz    11 年前

    要在这里添加答案,这也取决于递归中涉及的函数。例如,只需在函数中添加几个参数就可以更改结果:

    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(在铬39控制台中测试)。火狐34分别给出25085和13572。

    在零参数体周围添加try/catch块 inc() 提供了11413帧铬和13161帧火狐。有了3个参数和try/catch块,Chrome有8967个,火狐有7517个。

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