我有一些使用相當深的遞歸的Javascript代碼,我想知道各種瀏覽器中的遞歸限制是什麼(即錯誤「太多遞歸」發生的地方)。什麼是Firefox,Chrome,Safari,IE等的js遞歸限制?
任何人有任何可靠的數字,按版本?
我有一些使用相當深的遞歸的Javascript代碼,我想知道各種瀏覽器中的遞歸限制是什麼(即錯誤「太多遞歸」發生的地方)。什麼是Firefox,Chrome,Safari,IE等的js遞歸限制?
任何人有任何可靠的數字,按版本?
Nicholas C. Zakas writes in his blog:
在不同的瀏覽器和操作系統上有更多的數據here。
我創建了一個瀏覽器測試來獲取更多日期。 Please run it here。
要添加到這裏的答案,這也可以取決於遞歸中涉及的函數。舉例來說,只是增加了幾個參數的函數可以改變結果:
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測試)。 Firefox 34分別提供25085和13572。
在零參數inc()
的正文周圍添加try/catch塊會在Chromium中提供11413個幀,在Firefox中提供13161個幀。通過3個參數和try/catch塊,Chrome中的8967和Firefox中的7517。
我從這裏得出的結論是,一個在瀏覽器中的堆棧深度附近工作的應用程序可能只能根據類似於應用程序中使用的那些函數的經驗測量來計算出結果。
我非常快速地閱讀文章後,我把它扔在一起:http://jsfiddle.net/TdWTs/ – endemic 2013-04-10 19:41:46
@endemic很好的工作。我在http://adamrich.name/recursion.html上爲這個問題製作了一個瀏覽器。如果我們可以讓很多人運行測試,我們可以通過瀏覽器和操作系統獲得最新的recusrion限制表。 – Adam 2013-04-11 17:36:07
我的閱讀理解技巧需要更多的工作......完全跳過了您已經完成了瀏覽器測試的部分。我運行它幾個瀏覽器,令人驚訝的是Chrome有最低的限制!哦,一位同事擔心幾百次遞歸迭代(wat),所以我有興趣找到真相。 – endemic 2013-04-11 19:19:14