Проблема на самом деле противоположна тому, что вы написали: все функции разделяют такое же замыкание.( edit - после перечитывания того, что вы написали, я не уверен, что это «что-то противоположное»; дело в том, что все эти маленькие функции, которые вы передаете «eventListenerFunction», будут совместно использовать одну и ту же переменную, "someClickableObject", так что в конце цикла все они будут ссылаться на тот, что был создан на последней итерации!)
Чтобы исправить это, вам нужно как-то ввести другую область видимости:
eventListenerFunction(someClickableObject, 'click', (function(obj) {
return function() {
alert(obj.index);
};
})(someClickableObject));
Это вводит анонимную функцию.Эта маленькая функция вызывается со ссылкой на вашу локальную переменную, что приводит к созданию другой области видимости.Эта функция возвращает функцию, фактически переданную этой вещи «eventListener».Теперь у него есть собственная копия «someClickableObject».
Однако это всего лишь мелкая копия.В вашем случае это нормально, потому что вы создаете новый объект на каждой итерации.На практике мне почти никогда не приходилось беспокоиться о таком случае;обычно мелкая копия - это все, о чем мне нужно беспокоиться (потому что часто это просто счетчик, или строковый ключ, или что-то подобное).