1

定义了一个函数 fact 以在延续传递样式中找到阶乘,

    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, fact(1,inner(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 回答