JavaScript не не имеет блок-область.
Единственный способ создать новую область видимости переменной - использовать функцию.
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<testArray.length;i++){
var img = createImg(testArray[i]);
}
Передача testArray[i]
в функцию, которая создает и возвращает новое изображение, гарантирует, что ссылка url
в обработчике onload
будет тот, который был определен в функции.
РЕДАКТИРОВАТЬ:
В конечном счете, вы никогда не сделаете этого, если всевам нужен доступ к url
.
. Вы просто получите его из свойства элемента через 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<testArray.length;i++){
var img = new Image();
var url = testArray[i];
img.onload = onloadHandler;
img.src = url;
}
Таким образом, вы не создаетеидентичный экземпляр функции-обработчика в цикле, но совместно использующий тот же экземпляр и ссылающийся на элемент, получивший событие, через this
.