不太清楚参数关系
cc老师,在函数式编程的这节中,我不太清楚:
1. loggingComparer()函数中,参数函数,和返回值函数中他们的参数都叫a, b他们是两个相同的值吗?
2. 当我将loggingComparer()函数的返回值函数的参数更改后,编辑器会提醒将loggingComparer()的所有参数更该成:
function logginComparer(comp: (a: number, b: number) => number) { return (c: number, d: number) => { console.log('comparing', c, d) return comp(c, d) } }
然后就可以正确运行出结果了,同样打印日志,这里的c,d是如何和a,b产生联系的
//参数和返回值都是函数 function logginComparer(comp: (a: number, b: number) => number) { return (a: number, b: number) => { console.log('comparing', a, b) return comp(a, b) } } /* function comparer(a: number, b: number){ return a- b } function CreatComparer(p: {smallerfirst: boolean} ){ if(p.smallerfirst){ return (a: number, b: number) => a - b }else{ return (a: number, b: number) => b - a } } let arr = [1, 3, 5, 3, 6, 5, 88, 66, 98, 100] let cmp = CreatComparer({smallerfirst: true}) arr.sort(logginComparer(cmp)) console.log(arr) */
16
收起
正在回答 回答被采纳积分+1
1回答
ccmouse
2021-11-02 20:42:53
我们不太需要纠结这里的参数名称,可以放心的去重名。
function logginComparer(comp: (a: number, b: number) => number) { return (c: number, d: number) => { console.log('comparing', c, d) return comp(c, d) } }
第1行的a,b,没有什么具体的含义,关键是它们的类型。它规定了comp这个参数的类型,是一个函数,这个函数输入两个number,返回一个number。至于这两个输入是叫a、b,还是c、d,都无所谓。
第2行,这里我实现了loggingComparaer函数,让它返回一个函数。这个返回的函数参数也是两个number,同学叫它c,d,我叫它a,b,都可以。
那么第3行开始,第2行这个返回的函数的函数体,必须引用它的参数的名字,就是这里的c,d。
第4行,comp(c,d),用c,d来调用comp函数,comp函数的参数是a,b,也就是这里,把c,d赋给了a,b。但是a,b在哪里,comp函数是什么,我们不知道。loggingComparer的作用是不管你给我什么comp函数,我都能包装一下,返回一个带日志的比较函数。而comp本身是什么我不需要知道。
那么comp到底是什么,哪里来的,就在这行:
let cmp = CreatComparer({smallerfirst: true})
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星