不太清楚参数关系

不太清楚参数关系

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)
*/


正在回答 回答被采纳积分+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})


  • 提问者 慕移动9586716 #1

    嗯,这个理解了;这里一系列的参数,其实都要到,array.sort()中再具体给值了吧?



    2021-11-02 21:17:57
  • ccmouse 回复 提问者 慕移动9586716 #2

    是这样的。

    2021-11-03 10:05:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师