web-dev-qa-db-ja.com

Firefox、Chrome、Safari、IEなどのjs再帰制限は何ですか?

かなり深い再帰を使用するJavascriptコードがいくつかあり、さまざまなブラウザーでの再帰制限(つまり、「再帰が多すぎる」というエラーが発生するポイント)を調べたいと思います。

バージョンごとに、これについて確かな数字を持っている人はいますか?

37
Maciek

ニコラスC.ザカスは彼のブログに書いています

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

さまざまなブラウザやOSに関するデータがさらにあります ここ

より多くのデータを取得するために、Browserscopeテストを作成しました。 ここで実行してください

更新:

上記の結果は現在廃止されていますが、 browserscopeの結果 が更新されています:

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

ここでの答えに追加するために、これは再帰に関係する関数にも依存する可能性があります。たとえば、関数にいくつかのパラメータを追加するだけで、結果が変わる可能性があります。

_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)になります。

これからの私の持ち帰りは、ブラウザのスタックの深さの近くで動作するアプリケーションは、おそらくアプリで使用されているものに似た関数の経験的測定に基づいてのみこれを理解できるということです。

14
jpolitz