You need to put the closure in a separate function.
for(var dontUse = 0; dontUse < 10; ++dontUse) { (function(i) { createButton(x, y, function() { alert("button " + i + " pressed"); } })(dontUse); }
This code creates an anonymous function that takes i as a parameter for each iteration of the loop.
Since this anonymous function has a separate parameter i for each iteration, it fixes the problem.
It is equivalent
function createIndexedButton(i) { createButton(x, y, function() { alert("button " + i + " pressed"); } } for(var i = 0; i < 10; ++i) { createIndexedButton(i); }
SLaks
source share