Красноречивый 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
Метод принимает два параметра:
- первый - это массив для итерации,
- и второй - это делегат, который будет поднят против текущего элемента массива... функция, которая будет вызываться для каждого элемента массива.
Это значит, что объявлена функция с одним параметром с именем number (function (number) { ... }
) будет вызываться для каждого элемента предоставленного массива [1, 10, 100, 1000]
и число будет установлено для каждого из этих значений.
Надеюсь это поможет