I've encountered some code that I'm having trouble fully understanding. The principles seem clear enough, but I'm having some difficulty with the second argument that's declared in the forEach function call. Clearly the anonymous function is passed into forEach via the action argument, but how exactly does it work once inside the for loop?

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

var numbers = [1, 2, 3, 4, 5], sum = 0;

forEach(numbers, function(number) {
  sum += number;
});

console.log(sum); // 15

```

I think what confuses me most is that the syntax of the anonymous function doesn't seem *compatible* with `action(array[i])` - I mean, I understand that `sum` acquires each value of the array in turn, but if the function "replaces" the `action` argument, how and where does the `(array[i])` part fit in?