mus_木司 2020-03-09 21:18 采纳率: 100%
浏览 222
已采纳

问一个关于函数参数传递的问题

const { log } = console; //对console.log进行对象解构
function currying(fn) {
    return (a) => fn.call(this, a);
}

function tailFactorial(n, total = 1) {
    if (n === 1) return total;
    return tailFactorial(n - 1, n * total);
}

const factorial = currying(tailFactorial);

log(factorial(5)); // 120

有没有学识渊博的大佬,请问一下这个tailFactorial函数当参数传递到 currying里面factorial(5)的5为什么只能在currying里面的return里面截取到,在currying(fn,a)这样就截取不到。
想问一下是什么原理,还有就是怎么找到参数a的来源

  • 写回答

2条回答 默认 最新

  • Todd_Pointer 2020-03-16 18:52
    关注

    考虑着这几行代码

    function currying(fn) {
        return (a) => fn.call(this, a);
    }
    const factorial = currying(tailFactorial);
    

    相当于

    const factorial = (a) => tailFactorial.call(undefined, a); // currying 中 this 为 undefined 或者 window/global
    

    相当于

    function factorial(a) {
        return tailFactorial(a);
    }
    

    你会发现, 其实 currying 并没有起到什么实质性作用,它也没有任何机会接触到 5 这个参数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗