В вашем примере i
в функциях - это та же переменная, что и i
вне функций. Как i
увеличивается в цикле, так и увеличивается внутри функций. В результате, если функции вызываются после завершения цикла, все они будут предупреждать «7».
Вам необходимо создать новую переменную с соответствующей областью действия и скопировать в нее значение i
.
Примерно так создаст желаемый эффект.
...
var pushHandler = function(i) {
myHandlers.push(new Handler({
handlerName: 'myHandler'+i, // works, e.g. ->myHandler1, 2, 3 etc.
handlerFunc: function(bla) { /*...*/ alert(i); } // doesn't work,all return 7
}
}
...
for(var i = 0; i < 7; i++) {
pushHandler(i);
}
...