Ваш обратный вызов не является самозамыкающимся - функция, которую вы вызываете напрямую (forEach
или extent
), называет это.
Эта функция решает, когда вызывать ваш обратный вызов, и с какими аргументами. В случае Array.prototype.forEach
он выполняется один раз для каждого элемента массива. Аргументами являются текущий элемент и индекс массива.
Например, простой forEach
-стиль функция может выглядеть следующим образом:
function each(array, callback) {
for(var i = 0; i < array.length; ++ i) {
callback(array[i], i);
}
}
Пример использования:
each([1,2,3], function(element, i) {
console.log(element * element, i);
})
// Output:
// 1 0
// 4 1
// 9 2
Обратите внимание, как ваш обратный вызов выполняется в три раза, с различными аргументами каждый раз. Ваш обратный вызов не контролирует аргументы или сколько раз он вызывается - это находится под контролем each
.
Это не самоисключение анонимных функций, это просто анонимные функции, переданные как аргументы –
'forEach' использует обратный вызов, который обрабатывает каждый элемент массива. 'd' - текущий элемент цикла. 'd' можно назвать чем-нибудь btw. Я предполагаю, что 'extent' - это метод, который принимает массив (' data') и использует обратный вызов аналогичным образом. В каждом примере 'd' представляется массивом объектов JavaScript. – Andy