Помимо сохранения атрибутов объекта DOM в цикле, вы также можете использовать замыкания функций, чтобы «заморозить» копию переменных в цикле для конкретного вызова функции. Вы можете сделать это так:
for (var a=index; a<rows.length; a++) {
tr = rows[a];
tr.onclick = function(tr, a) {
return(function() {
DropDownManager.onItemClick(tr, a);
});
}(tr,a);
}
То, что это делает, говорит, что присваивает tr.onclick результаты выполнения анонимного вызова функции, который принимает две переменные в качестве параметров (названных tr и a) и передает текущие значения tr и a в качестве параметров (это передача Текущие значения «замораживают» текущие значения этих переменных в закрытии этой функции.
Результатом выполнения этого вызова функции является сама другая анонимная функция. Поскольку эта внутренняя анонимная функция теперь назначена tr.onclick, она создает замыкание функции, которое поддерживает все состояние, которое в данный момент находится в этом закрытии. Это состояние включает в себя «замороженные» значения tr и a, но они остаются внутренними только для этого закрытия функции, поэтому каждый раз в цикле создается новое закрытие функции с новыми «замороженными» и «сохраненными» значениями tr и a.