2012-08-29 1 views
0

Можно создать дубликат:
Javascript closure inside loops - simple practical exampleКак убедиться, что переменная объем поддерживается в этом цикле

У меня есть цикл с image.onload вызова, как так:

for (var i = 0; i < array.length; i++){ 
    var item = array[i] 
    , image = new Image(); 

    image.onload = function(){ 
    // do something with 'item' 
    } 
    image.src = url; 
} 

Поскольку я не знаю, когда срабатывает функция onload, я считаю, что t hat item переписывается. Как я могу убедиться, что каждая функция onload запускается с переменной item, ссылающейся на данные, которые она делает в момент привязки функции к событию onload?

ответ

0

Это должно сработать.

image.onload = function(item){ 
    return function(){ 
     // do something with 'item' 
    }(item); 
}; 

То, что вы хотите сделать, это создать «сферу», так что, когда функция события вызывается, то closure приносит значение, которое вы хотите с ним.

0

Используйте IIFE для возврата функции, которая использует текущий элемент

image.onload = (function(param){ 
    return function(){ 
    //do something with 'param' 
    } 
    })(item); 
Смежные вопросы