i
внутри вашей функции оценивается, когда функция выполняется , а не когда вы присваиваете ей onload
.Ваш цикл for уже завершен к тому времени, когда сработает любая из ваших onload
функций, поэтому все они видят окончательное значение N
.
Чтобы захватить текущее значение i
, вам нужно передатьэто как параметр для другой функции, где он может быть записан как локальная переменная:
function captureI(i) {
return function () {
console.log("Image " + i + " loaded");
};
}
var images = [];
for (var i=1; i<N; i++) {
images[i] = new Image();
images[i].onload = captureI(i);
images[i].src = "image" + i + ".png";
}
Это работает, потому что каждый раз, когда вы вызываете captureI
, создается новая локальная переменная для этого экземпляра captureI
,По сути, вы создаете N
разных переменных, и каждая функция onload
захватывает отдельный экземпляр переменной.