Problemas de escopo em Javascript ao passar uma função anônima para uma função nomeada com uma variável local
Desculpe pelo título - não consegui descobrir uma maneira de expressá-lo.
Aqui está o cenário:
Eu tenho uma função que cria um elemento:
buildSelect(id,cbFunc,...)
Dentro do buildSelect, ele faz isso:
select.attachEvent('onchange',cbFunc);
Eu também tenho uma matriz que vai:
var xs = ['x1','x2','x3'...];
Dado tudo isso, eu tenho algum código que faz isso:
for(var i = 0; i < xs.length; i++)
{
buildSelect(blah,function(){ CallBack(xs[i],...) },...);
}
O problema é que, quando o onchange é acionado em uma dessas seleções, ele vai corretamente para CallBack (), mas o primeiro parâmetro está incorreto. Por exemplo, se eu mudar o terceiro, espero que CallBack () seja chamado com xs [2], em vez disso, recebo algumas coisas variadas, como xs [3] ou qualquer outra coisa.
Se eu modificá-lo um pouco para isso:
for(var i = 0; i < xs.length; i++)
{
var xm = xs[i];
buildSelect(blah,function(){ CallBack(xm,...) },...);
}
Ainda estou recebendo valores incorretos no CallBack (). Algo me diz que isso está relacionado ao escopo / fechamento, mas parece que não consigo descobrir o que.
Eu simplesmente quero que o primeiro selecione chamar CallBack para onchange com o primeiro parâmetro como xs [0], o segundo selecione com xs [1] e assim por diante. O que eu poderia estar fazendo de errado aqui?
Devo esclarecer que xs é uma variável global.
obrigado