首页 > 解决方案 > 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 ]

我究竟做错了什么?

标签: javascriptarraysreturnclosureshigher-order-functions

解决方案


您没有将参数传递给包装函数。该add函数尝试对两个undefined值求和,结果是NaN(不是数字)。

您必须将参数传递给包装函数:

 return function(a, b) {
    return inputFunc(a, b); // <<<
 }

由于sometimes是高阶函数,需要包装不同的函数,参数个数不断变化,无法知道被包装函数的实现。为确保这一点,您应该使用rest 参数(将参数收集到数组)和spread(将数组转换回参数)将参数传递给包装函数。

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(...args) {
    return inputFunc(...args)
  }
}

console.log(outputArr);


推荐阅读