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