Javascript图像加载事件绑定
我有一段代码,它循环遍历一个数组,加载图像,并在加载图像时发出通知Javascript图像加载事件绑定,javascript,html,javascript-events,Javascript,Html,Javascript Events,我有一段代码,它循环遍历一个数组,加载图像,并在加载图像时发出通知 for (var i = 0; i < arr.length; i++) { var imageObj = new Image(); imageObj.src = url[i]; imageObj.onload= (function(i){ return function(){ console.l
for (var i = 0; i < arr.length; i++) {
var imageObj = new Image();
imageObj.src = url[i];
imageObj.onload= (function(i){
return function(){
console.log(i, 'loaded');
}
})(i);
}
有什么问题?在这种情况下,有什么方法可以避免使用闭包吗?问题的一部分:事件不是调用
onload
,而是load
imageObj.addEventListener('load', function() { /* ... */ }, false);
除此之外,由于
i
在事件侦听器函数之外发生更改,因此您需要一个闭包。@gillesc一个普通的ES5数组。forEach()将为您提供一个新的作用域,因此您的绑定并不总是在最后一项上设置。与迭代索引和添加自己的闭包相比,代码更少。这不是唯一的问题,但您的第二个断开的示例显然是断开的JS,在第一行末尾缺少i{
。为了安全起见,您不应该先分配事件,然后再分配src吗?
imageObj.addEventListener('load', function() { /* ... */ }, false);