Когда вы вызываете forEach
для массива, код в forEach
вызывает функцию, которую вы передаете ей «для каждой» записи в массиве, передавая запись в функцию (вместе с несколькими другими вещами).Таким образом, rect
- это каждая запись в массиве по порядку.
Внутренне, не учитывая некоторые детали, forEach
выглядит примерно так:
function forEach(callback) {
// Here, `this` is the array `forEach` was called on
for (let index = 0, len = this.length; index < len; ++index) {
callback(this[index], index, this);
// ^^^^^^^^^^^--- this is received by your callback as `rect`
}
}
(одна из основных деталейЯ оставил для ясности forEach
s thisArg
и вызов callback
с определенным значением this
.)
Пример записи в журнал каждого шага:
function pseudoForEach(callback) {
console.log("Start of pseudoForEach");
for (let index = 0, len = this.length; index < len; ++index) {
console.log(
"Calling callback with: this[index] = " + this[index] +
", index = " + index + ", and this = (the array)"
);
callback(this[index], index, this);
}
console.log("End of pseudoForEach");
}
Object.defineProperty(Array.prototype, "pseudoForEach", {
value: pseudoForEach,
configurable: true,
writable: true
});
var a = ["one", "two", "three"];
console.log("About to call pseudoForEach");
a.pseudoForEach(function(rect) {
console.log("In callback, rect = " + rect);
});
console.log("Done with pseudoForEach call");
.as-console-wrapper {
max-height: 100% !important;
}
I секунда Рекомендация Jaromanda X , MDN - хороший ресурс для информации JavaScript (и HTMLи CSS).