considerare tali ciclo:JavaScript variabile vincolante e ciclo
for(var it = 0; it < 2; it++)
{
setTimeout(function() {
alert(it);
}, 1);
}
L'output è:
=> 2
=> 2
vorrei che fosse: 0, 1. vedo due modi per risolvere il problema:
Soluzione # 1.
Questo sulla base del fatto che siamo in grado di trasmettere i dati a setTimeout.
for(var it = 0; it < 2; it++)
{
setTimeout(function(data) {
alert(data);
}, 1, it);
}
Soluzione # 2.
function foo(data)
{
setTimeout(function() {
alert(data);
}, 1);
}
for(var it = 0; it < 2; it++)
{
foo(it);
}
Ci sono altre alternative?
+1. Tuttavia, è possibile modificarlo leggermente modificando la firma del metodo su: 'function (m) {/ * code * /}) (it);' – Alan
+1, ma qualcuno può spiegarmi perché questo funziona ?! –
@digorydoo La funzione dichiarata nel ciclo è racchiusa tra parentesi seguita da un insieme di parentesi che agiscono per richiamare immediatamente la funzione. Dato che le variabili sono circoscritte alla funzione in cui sono dichiarate (o all'ambito globale se non dichiarate all'interno di una funzione), il valore di 'it' in ogni iterazione è assegnato alla variabile' m' che viene portata alla funzione che viene eseguita subito. –