ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascript スキルでサポートされる再帰呼び出しの最大数の分析

JavaScript_javascript スキルでサポートされる再帰呼び出しの最大数の分析

WBOY
WBOYオリジナル
2016-05-16 16:43:111899ブラウズ

JavaScript エンジンが実行できる再帰呼び出しの数について知りたいですか?

再帰呼び出しの数

次の関数を使用すると、答えを見つけることができます: (Ben Alman の要点からインスピレーションを受けています)

コードをコピー コードは次のとおりです:

関数 computeMaxCallStackSize() {
{
を試してください return 1 computeMaxCallStackSize();
} キャッチ (e) {
// コールスタックのオーバーフロー
1 を返します;
}
}

3 つの結果:

コードをコピー コードは次のとおりです:

Node.js: 11034
Firefox: 50994
クロム: 10402

これらの数字は何を表していますか? Aleph 氏は、V8 では再帰呼び出しの数はスタックのサイズとスタック フレーム (パラメータを保持するローカル変数) のサイズの 2 つの量に依存すると指摘しました。これを確認するには、computeMaxCallStackSize() にローカル変数を追加します。これにより、低い値が返されます。

ECMAScript 6 での末尾呼び出しの最適化

ES6 には末尾呼び出しの最適化があります。関数の最後のステップも関数呼び出しである場合、サブ関数を通じて呼び出されるのではなく、「スキップ」されます。これは、ES6 (厳密モード) では、computeMaxCallStackSize 関数を少し変更するだけで、永久に実行できることを意味します。

コードをコピー コードは次のとおりです:

関数 computeMaxCallStackSize(size) {
サイズ = サイズ 1;
computeMaxCallStackSize(サイズ 1) を返します;
}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。