The i
inside your function is evaluated when the function is executed, not when you assign it to onload
. Your for loop has already completed by the time any of your onload
functions fire, so all of them see the final value N
.
To capture the current value of i
, you need to pass it as a parameter to another function where it can be captured as a local variable:
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 = "https://stackoverflow.com/questions/4418326/image" + i + ".png";
}
This works because every time you call captureI
, a new local variable is created for that instance of captureI
. In essence, you are creating N
different variables and each onload
function captures a different instance of the variable.