函数的实参形参个数怎么算?

 我来答
幼稚的孩子lzz
2022-02-09 · TA获得超过249个赞
知道小有建树答主
回答量:793
采纳率:100%
帮助的人:14.8万
展开全部

分为以两种情况确定:

  1. 当函数形参个数确定的时候:
    function sum(a,b,c){
    console.log(a+b+c);
    }
    实现sum(1,2,3)==sum(1)(2)(3);
    function curry(fn) {
    return function curryFn(...args) {
    if (args.length < fn.length) {
    //args.length:当前执行函数传入的实参的个数;
    //fn.length:函数sum形参确定,fn.length的值为形参的个数;此处为3
    //只要满足条件,递归返回函数
    return function(...argss) {
    //这里的argss是返回函数时的参数
    return curryFn(...args.concat(argss));
    }
    }
    return fn(...args);
    }
    }
    var mySum = curry(sum);
    mySum(1,2,3):
    实参为(1,2,3),即实参个数为3==sum函数的形参个数3;不进入条件,直接执行sum(1,2,3);
    mySum(1)(2)(3):
    第一次实参为1,实参个数1<sum函数的形参个数3,进入条件,curryFn(1,2);
    第二次实参为1,2,实参个数2<sum函数的形参个数3,进入条件,curryFn(1,2,3);
    第三次实参为1,2,3,实参个数3==sum函数的形参个数3,不进入条件,执行fesum(1,2,3);

2.当函数形参个数不确定的时候
计算以下结果
sumAdd(1,2,3)
sumAdd(1)(2,3)(4)
sumAdd(1,2)(3)(4)(5)
由于参数不确定,就要一直返回函数,返回函数内部定义了一个函数对象(我管这叫函数对象),
将每次函数执行获取的参数保存到函数对象中并返回函数对象,然后给函数对象扩展一个计算结果的方法即可。
function sumAdd(...args){
function currySum(){
//定义函数对象
function mySum(...argss){
//这一步即是将每次函数执行的参数保存下来
args = args.concat(argss);
return mySum;
}
mySum.getResult = function(){
//这一步即是将保存的参数进行结果计算
return args.reduce((a,b)=>{
return a+b;
})
}
return mySum;//最终返回的函数对象
}
return currySum();//返回函数
}
形似sumAdd(1)(2,3)(4)这种得到的结果都是mySum函数对象,要得到计算结果还得调用getResult();
有几对括号就返回函数几次。
console.log(sumAdd(1,2,3).getResult());
返回函数一次,然后调用getResult;
console.log(sumAdd(1)(2,3)(4).getResult());
返回函数三次,然后调用getResult;
console.log(sumAdd(1,2)(3)(4)(5).getResult());
返回函数四次,然后调用getResult。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式