considerar, tales bucle:JavaScript variable de unión y el bucle
for(var it = 0; it < 2; it++)
{
setTimeout(function() {
alert(it);
}, 1);
}
La salida es:
=> 2
=> 2
me gustaría que fuera: 0, 1. Veo dos maneras de solucionarlo:
Solución n. ° 1.
Esta basada en el hecho de que podemos pasar datos a setTimeout.
for(var it = 0; it < 2; it++)
{
setTimeout(function(data) {
alert(data);
}, 1, it);
}
Solución # 2.
function foo(data)
{
setTimeout(function() {
alert(data);
}, 1);
}
for(var it = 0; it < 2; it++)
{
foo(it);
}
¿Hay otras alternativas?
+1. Sin embargo, puede modificarlo ligeramente cambiando la firma del método a: 'function (m) {/ * code * /}) (it);' – Alan
+1, pero ¿alguien puede explicarme por qué funciona? –
@digorydoo La función declarada en el ciclo está envuelta entre paréntesis seguida de un conjunto de paréntesis que actúa para invocar inmediatamente la función. Dado que las variables tienen un alcance para la función en la que se declaran (o ámbito global si no se declara dentro de una función), el valor de 'it' en cada iteración se asigna a la variable' m' que se asigna a la función que se ejecuta inmediatamente. –