Почему я получаю undefined в этом примере функций более высокого порядка? - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь придумать простой пример того, как работают функции более высокого порядка, и по какой-то причине я получаю неопределенность, когда запускаю этот код.Я часами смотрел на него и бил в стену.Есть ли ответное заявление, которое я где-то пропустил?Заранее спасибо.

var result = 0;
var nums = [1,2,3,4];
var square = function(number) { 
  result = number * number;
  return result;
}

function each(array, func) {
  for (var i = 0; i < array.length; i++) {
    func(array[i]);
  }
}


function sumSquares(arrayOfNumbers) {
  return each(arrayOfNumbers, square);
}

1 Ответ

0 голосов
/ 07 апреля 2019

Выражение func(array[i]); не используется. Вы хотите суммировать каждое возвращаемое значение, чтобы вы могли return вызвать reduce:

var nums = [1,2,3,4];
var square = function(sumSoFar, number) { 
  return sumSoFar + number * number;
}

function each(array, func) {
  return array.reduce(func, 0);
}


function sumSquares(arrayOfNumbers) {
  return each(arrayOfNumbers, square);
}
console.log(sumSquares(nums));

Методы массива действительно подходят, когда это возможно, но если по какой-то причине это запрещено, то вручную добавьте вызов func с result внутри each:

var nums = [1,2,3,4];
var square = function(number) { 
  result = number * number;
  return result;
}

function each(array, func) {
  var result = 0;
  for (var i = 0; i < array.length; i++) {
    result += func(array[i]);
  }
  return result;
}


function sumSquares(arrayOfNumbers) {
  return each(arrayOfNumbers, square);
}
console.log(sumSquares(nums));
...