I have trouble understanding the scoping rules in Javascript.
In the example below, I would assume that scope url variable is private in the for-loop. And that the onloa
JavaScript does not have block-scope.
The only way to create new variable scope is in a function.
var testArray = ["http://g0.gstatic.com/images/icons/onebox/weather_rain-40.png", "http://g0.gstatic.com/images/icons/onebox/weather_scatteredshowers-40.png"];
function createImg( url ) {
var img = new Image();
img.onload = function(){
alert(url);
}
img.src = url;
return img;
}
for (var i=0;i
Passing the testArray[i]
to a function that creates and returns the new image ensure that the url
referenced in the onload
handler will be the one that was scoped in the function.
EDIT:
Ultimately, you'd never do this if all you need is access to the url
.
You'd just get it from the property of the element via this
.
function onloadHandler(){
alert( this.src ); // <--- get the url from the .src property!
}
var testArray = ["http://g0.gstatic.com/images/icons/onebox/weather_rain-40.png", "http://g0.gstatic.com/images/icons/onebox/weather_scatteredshowers-40.png"];
for (var i=0;i
This way you're not creating an identical handler function instance in the loop, but rather sharing the same instance, and referencing the element that received the event via this
.