JavaScript:调用添加函数返回新数组的高阶函数;错误:输出数组中的“NaN”元素

我有一个“有时”的函数,想从中返回一个函数对象。


下面是我的代码:


let add = (a, b) => {

    return a + b;

  };


myFunc = sometimes(add);


const outputArr = [];


    for (let i = 0; i < 3; i++) {

      outputArr.push(myFunc(2 + i, 3 + i));

    }


function sometimes (inputFunc){

  return function (a, b){

    return inputFunc()

  }

}


outputArr 

我希望我的 outputArr 变量等于:


[5, 7, 9]

相反,我的等于:


 [ NaN, NaN, NaN ]

我究竟做错了什么?


三国纷争
浏览 143回答 1
1回答

潇潇雨雨

您没有将参数传递给包装的函数。该add函数尝试对两个undefined值求和,结果为NaN(不是数字)。您必须将参数传递给包装函数:&nbsp;return function(a, b) {&nbsp; &nbsp; return inputFunc(a, b); // <<<&nbsp;}由于sometimes是高阶函数,需要包装不同的函数,参数数量不断变化,无法知道被包装函数的实现。为确保这一点,您应该使用剩余参数(将参数收集到数组)和传播(将数组转换回参数)将参数传递给包装函数。let add = (a, b) => {&nbsp; return a + b;};myFunc = sometimes(add);const outputArr = [];for (let i = 0; i < 3; i++) {&nbsp; outputArr.push(myFunc(2 + i, 3 + i));}function sometimes(inputFunc) {&nbsp; return function(...args) {&nbsp; &nbsp; return inputFunc(...args)&nbsp; }}console.log(outputArr);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript