Adicionando e removendo ouvintes de eventos com parâmetros

Eu estou escrevendo umbaunilha JavaScript ferramenta, que, quando ativado, adiciona ouvintes de evento a cada um dos elementos passados ​​nele.

Eu gostaria de fazer algo assim:

var do_something = function (obj) {
        // do something
    };

for (var i = 0; i < arr.length; i++) {
    arr[i].el.addEventListener('click', do_something(arr[i]));
}

Infelizmente isso não funciona, porque, tanto quanto eu sei,ao adicionar um ouvinte de evento, os parâmetros só podem ser passados ​​para funções anônimas:

for (var i = 0; i < arr.length; i++) {
    arr[i].el.addEventListener('click', function (arr[i]) {
        // do something
    });
}

O problema é que eu preciso ser capaz de remover o ouvinte de eventos quando a ferramenta está desabilitada, mas eu não acho que é possível remover ouvintes de eventos com funções anônimas.

for (var i = 0; i < arr.length; i++) {
    arr[i].el.removeEventListener('click', do_something);
}

Eu sei que eu poderia facilmente usar o jQuery para resolver o meu problema, mas estou tentando minimizar as dependências. jQuery deve contornar isso de alguma forma, mas o código é um pouco de selva!

questionAnswers(3)

yourAnswerToTheQuestion