JavaScriptサポートの最大再帰コール回数分析

950 ワード

JavaScriptエンジンは何回再帰的に呼び出されますか?
再帰的に呼び出す
以下の関数で答えを見つけられます.(Ben Almanからインスピレーションされたgist)
 
  
function computeMaxCallStackSize() {
    try {
        return 1 + computeMaxCallStackSize();
    } catch (e) {
        // Call stack overflow
        return 1;
    }
}
3つの結果:
 
  
Node.js: 11034
Firefox: 50994
Chrome: 10402
これらの数字は何を表していますか?Aleph氏は、V 8において、再帰的呼び出しの数は、2つの量に依存することを指摘する.スタックのサイズとスタックフレーム(パラメータを保存する局所変数)のサイズ.あなたが通ってもいいです  computteMaxCallStockSize()は、ローカル変数を追加して検証します.
ECMAScript 6の末尾呼び出し最適化ES 6は、末尾呼び出し最適化されています.もし関数の最後のステップが関数呼出であるなら、サブ関数ではなく「ジャンプ」されます.これはES 6(厳格なモード)で、少しだけcomputteMaxCallStockSize関数を変えたら永遠に実行できます.
 
  
function computeMaxCallStackSize(size) {
    size = size || 1;
    return computeMaxCallStackSize(size + 1);
}