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的来源
考虑着这几行代码
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 这个参数