剩余参数

剩余参数

老师,我遇到了一段代码,我不太理解为什么这里的剩余参数args是传入sum函数的参数[1,2,3]而不是空数组。对于curry函数来说,它的实参难道不是唯一的函数sum吗,为什么还存在剩余参数呢?

function curry(func) {
  return function curried(...args) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    } else {
      return function(...args2) {
        return curried.apply(this, args.concat(args2));
      }
    }
  };}
function sum(a, b, c) {
  return a + b + c;}
let curriedSum = curry(sum);
console.log( curriedSum(1, 2, 3) );  // =>6


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,此处是为了使用apply来改变内部指向和传参,而apply中的这个args:这个是类数组,它将作为参数传给Function(args-->arguments),而...args是用来接收参数的。

祝学习愉快~

  • Cynthia4660559 提问者 #1

    老师,我不太明白为什么这里的...args 能够接收调用时传的参数1,2,3。 

    2022-09-18 17:55:19
  • imooc_慕慕 回复 提问者 Cynthia4660559 #2

    同学你好,可以这样理解

    https://img1.sycdn.imooc.com//climg/6326f5f0085b529f11100470.jpg

    相当于返回的是这个函数,curriedSum这个变量等于curry()函数调用后的返回值即内部return 返回的curried()函数,因此curriedSum()调用执行的时候,就相当调用curried()函数,curriedSum(1,2,3)传的参数1,2,3会被curried()函数接收。同学可以再试着理解理解。

    祝学习愉快~

    2022-09-18 18:49:40
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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