Красноречивый Javascript: не могу понять, как числовое значение определяется в функции суммы

Я пытаюсь понять, как числовая переменная определяется на основе примера из книги Eloquent Javascript.

Когда я вывожу число, я вижу, как оно растет по мере продвижения цикла, но я не вижу, где на самом деле установлена ​​числовая переменная.

(Примечание: для тех, кто понимает Eloquent Javascript, я изменил функцию show() на alert())

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

function sum(numbers) {
  var total = 0;
  forEach(numbers, function (number) {
    total += number;
  });
  return total;
}
alert(sum([1, 10, 100, 1000]));

3 ответа

Решение
forEach(numbers, function (number) {
    total += number;
  });

В этой части number взято из текущего numbersи эквивалентно:

for (var i = 0; i < numbers.length; i++) {
  var number = numbers[i];

  function (number) {
    total += number;
  }
}

Он установлен примерно наполовину вниз по коду:

forEach(numbers, function (number) {

Или, скорее, когда эта анонимная функция вызывается:

action(array[i]);

(Так как функция была передана как action аргумент forEach функция.

Это очевидно, когда вы узнаете больше forEach Подпись метода.

Из вашего кода

function sum(numbers) 
{   var total = 0;     
    forEach(numbers, function (number) {       
        total += number;     
    });     
return total;   
}   

alert(sum([1, 10, 100, 1000]));   

тогда вам нужно знать, что ForEach Метод принимает два параметра:

  1. первый - это массив для итерации,
  2. и второй - это делегат, который будет поднят против текущего элемента массива... функция, которая будет вызываться для каждого элемента массива.

Это значит, что объявлена ​​функция с одним параметром с именем number (function (number) { ... }) будет вызываться для каждого элемента предоставленного массива [1, 10, 100, 1000]и число будет установлено для каждого из этих значений.

Надеюсь это поможет

Другие вопросы по тегам