在这种情况下如何使用闭包?

时间:2012-08-29 12:16:17

标签: javascript closures

查看onComplete结果:目前item.name始终为rty,但应为(1/2):qwe,(2/2):{{1 }}。我知道这个问题可以通过使用闭包来解决,但不知道如何。

稍微更新 http://jsfiddle.net/tJYem/

rty

2 个答案:

答案 0 :(得分:0)

img.onload = (function(currentI) {
    // here currentI will stay with the value the i had in the moment of creating this handler
})(i)

另外需要注意的是,在加载列表中的最后一个图像时会触发逻辑onComplete处理程序,而不是所有图像都已加载时 EM>

答案 1 :(得分:0)

您希望所有i处理程序都增加onload,因此不要为该变量创建闭包。否则,所有处理程序都会增加自己的i而不是共享值。此外,self与图像无关。但是,item在每个处理程序中应该有所不同:http://jsfiddle.net/tJYem/1/

img.onload = (function(item){
    return function(){
        self.onProgress(++i, total, item);
        i == total && self.onComplete();
    }
})(item);