Scope tiene problemas en Javascript al pasar una función anónima a una función con nombre con una variable local

o siento por el título: no pude encontrar una manera de expresarlo.

Aquí está el escenario:

Tengo una función que crea un elemento:

buildSelect(id,cbFunc,...)

Inside buildSelect hace esto:

select.attachEvent('onchange',cbFunc);

También tengo una matriz que dice:

var xs = ['x1','x2','x3'...];

Dado todo esto, tengo un código que hace esto:

for(var i = 0; i < xs.length; i++)
{
    buildSelect(blah,function(){ CallBack(xs[i],...) },...);
}

El problema es que cuando se activa onchange en una de esas selecciones, va correctamente a CallBack () pero el primer parámetro es incorrecto. Por ejemplo, si cambio la tercera selección, espero que CallBack () se llame con xs [2] en su lugar, obtengo algunas cosas diferentes como xs [3] u otra cosa.

Si lo modifico ligeramente a esto:

for(var i = 0; i < xs.length; i++)
{
    var xm = xs[i];
    buildSelect(blah,function(){ CallBack(xm,...) },...);
}

Todavía obtengo valores incorrectos en CallBack (). Algo me dice que esto está relacionado con el alcance / cierre, pero parece que no puedo entender qué.

Simplemente quiero que la primera selección llame a CallBack para el cambio con el primer parámetro como xs [0], la segunda selección con xs [1] y así sucesivamente. ¿Qué podría estar haciendo mal aquí?

Debo aclarar que xs es una variable global.

Gracia

Respuestas a la pregunta(4)

Su respuesta a la pregunta