【发布时间】:2011-02-17 19:26:25
【问题描述】:
我有一些使用相当深的递归的 Javascript 代码,我想了解各种浏览器中的递归限制是什么(即“递归过多”错误将发生的点)。
任何人对此有任何可靠的数字,按版本?
【问题讨论】:
标签: javascript recursion
我有一些使用相当深的递归的 Javascript 代码,我想了解各种浏览器中的递归限制是什么(即“递归过多”错误将发生的点)。
任何人对此有任何可靠的数字,按版本?
【问题讨论】:
标签: javascript recursion
Nicholas C. Zakas writes in his blog:
- Internet Explorer 7:1,789
- Firefox 3:3,000
- 铬 1:21,837
- Opera 9.62:10,000
- Safari 3.2:500
还有更多关于不同浏览器和操作系统的数据here。
我创建了一个 Browserscope 测试来获取更多数据。 Please run it here.
以上结果现已过时,但the browserscope results 已更新:
【讨论】:
要补充这里的答案,这也可能取决于递归中涉及的函数。例如,只需在函数中添加几个参数就可以改变结果:
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。
我从中得出的结论是,在浏览器中工作在堆栈深度附近的应用程序可能只能根据与应用程序中使用的函数类似的函数的经验测量来计算这一点。
【讨论】: