Come accedere a questa variabile in una funzione inline?
-
30-09-2019 - |
Domanda
Ecco il mio dilemma.
Ho questa sezione di codice:
var list_of_numbers = new Array();
function AddToArray(func)
{
// Add to the *beginning* of the array
// essentially reversing the order
list_of_numbers.unshift(func);
}
function DisplayNumber(num)
{
document.write(num);
}
for(var i=0;i<5;++i)
{
AddToArray(function() { DisplayNumber(i); });
}
for(var i=0;i<5;++i)
{
list_of_numbers[i]();
}
quello che dovrebbe accadere è che 5 funzioni inline saranno aggiunti alla matrice - ogni di prendere una copia di i
. Tuttavia questo non accade.
di uscita prevista:
43210
uscita effettiva:
01234
Soluzione
Hai due questioni separate, sia legato al campo di applicazione.
var list_of_numbers = new Array();
function AddToArray(func)
{
// Add to the *beginning* of the array
// essentially reversing the order
list_of_numbers.unshift(func);
}
function DisplayNumber(num)
{
document.write(num);
}
for(var i=0;i<5;++i)
{
(function(i)
{
AddToArray(function(){ DisplayNumber(i); });
})(i);
}
for(var j=0;j<5;++j)
{
list_of_numbers[j]();
}
-
La funzione anonima si sta passando a
AddToArray
è legato ali
variabili, non il valore corrente. Per far fronte a questo, creiamo una nuova funzione, e passare ili
corrente. -
JavaScript ha portata la funzione, in modo che quando si ri-dichiarare
i
nel secondo ciclo, si sta ancora modificando la stessa variabile. Così, abbiamo rinominarlo inj
.
Se solo la prima erano un problema, si otterrebbe 55555, dal momento che tutte le funzioni potrebbero utilizzare lo stesso i
, a quel punto 5. Tuttavia, dal momento che si riutilizza i
per il secondo indice, i
è impostato per l'indice di loop di corrente.