1

関数ファクトは、継続渡しスタイルで階乗を見つけるために定義されています。

    function fact(n,myFun)
    {
       if(n==1)
         myFun(1);
       else
         fact(n-1,function inner(t0){ myFun(n*t0) });
    }

と呼ばれ、

    fact(4, function outer(k) { console.log(k); } );

ここでブレークポイントを使用した後、この関数を呼び出した後、プログラムが次のように実行されることがわかりました

n = 4、事実 (4、外側)、その後

n = 4、ファクト (3、インナー (t0))、その後

n = 3、ファクト (2、インナー (t0))、その後

n = 2、事実(1、内側(t0))、そして

私の楽しみ(1)

この後、myFun(1) から 1 の値がどのように t0 に渡されるのか理解できません。

4

1 に答える 1

1

関数もログに記録すると、何が起こるかを確認できます。

function fact(n, myFun) {
    console.log(n, myFun);
    if (n == 1) {
        myFun(1);
    } else {
        fact(n - 1, function inner(t0) {
            console.log(n, t0);
            myFun(n * t0);
        });
    }
}

fact(4, function (v) { console.log(v); return v; });
.as-console-wrapper { max-height: 100% !important; top: 0; }

于 2016-12-13T08:22:25.027 に答える