Вам необходимо создать замыкание вашей переменной o
. Вы можете сделать это, назначив функцию, которая принимает значение, возвращает функцию, которая использует это значение. Ваш пример можно изменить так, чтобы получить желаемый эффект:
var o="before";
x = function(inner) {
return function()
{
alert(inner);
}
} (o); //here, the anonymous function is called, which will return another function which uses o
o="after";
x();//prints "before"
Более подробное описание см. В статье MDC , в которой есть раздел об использовании замыканий с циклами.
Эта же техника может быть применена в вашем цикле. Примерно так вы и хотели бы сделать:
var fn = function(x, y) {
return function() {
rr_download_start(x, y);
}
} (i, this);
link.addEventListener('click', fn ,false);