Вы должны поместить замыкание в отдельную функцию.
for(var dontUse = 0; dontUse < 10; ++dontUse) {
(function(i) {
createButton(x, y, function() { alert("button " + i + " pressed"); }
})(dontUse);
}
Этот код создает анонимную функцию, которая принимает i
в качестве параметра для каждой итерации цикла.
Поскольку эта анонимная функция имеет отдельный параметр i
для каждой итерации, она решает проблему.
Это эквивалентно
function createIndexedButton(i) {
createButton(x, y, function() { alert("button " + i + " pressed"); }
}
for(var i = 0; i < 10; ++i) {
createIndexedButton(i);
}