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