JavaScript: функция высшего порядка, вызывающая функцию Add для возврата нового массива;Ошибка: элементы NaN в выходном массиве - PullRequest
0 голосов
/ 02 июня 2019

У меня есть функция иногда, и я хочу вернуть объект функции из нее.

Ниже мой код:

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 ]

Что я делаю неправильно?

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

Вы не передаете параметры в упакованную функцию. Функция add пытается суммировать два значения undefined, и в результате получается NaN (не число).

Вы должны передать параметры в упакованную функцию:

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

Поскольку sometimes - это функция более высокого порядка, которая требует обтекания различных функций с изменяющимся числом параметров, она не может знать реализацию обернутой функции. Чтобы убедиться в этом, вы должны использовать rest parameters (для сбора параметров в массив) и 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);
0 голосов
/ 02 июня 2019

вы можете использовать свой код как

    function sometimes(a,b){
    return a + b;
}

const outputArr = [];

    for (let i = 0; i < 3; i++) {
      outputArr.push(sometimes(2 + i, 3 + i));

    }
console.log(outputArr);

теперь вывод

[ 5, 7, 9 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...