Ничего себе, я только что исправил эту неловкую ошибку в моем собственном коде. Все остальные поняли это неправильно:
images[i].onclick = function() {imgReplace(images[i]);};
не будет работать. Вместо этого должно быть:
images[i].onclick = (function(i) { return function() { imgReplace(images[i]); }; })(i);
Ответ Пола Александра находится на правильном пути, но вы не можете решить проблему, введя другую локальную переменную, подобную этой. Блоки JavaScript (например, блок {}
в цикле for) не создают новых областей видимости, что является существенным (и неочевидным) отличием от Java или C ++. Только функции создают область действия (оставляя в стороне некоторые новые функции ES5), поэтому выше была представлена другая функция. Переменная «i» из цикла передается в качестве параметра анонимной функции. Эта функция возвращает фактическую функцию-обработчик события, но теперь «i», на которую она ссылается, будет отдельным параметром области действия внешней функции. Поэтому каждая итерация цикла создаст новую область видимости, посвященную этому единственному значению «i».