Jestem programistą C# i używam go do zamykania pracy w C#. Obecnie muszę pracować z anonimowych funkcje JavaScript i mieć problem z następującym fragmencie:Uzyskiwanie dostępu do skopiowanej zmiennej typu integer w anonimowej metodzie javascript
function ClosureTest() {
var funcArray = new Array();
var i = 0;
while (i < 2) {
var contextCopy = i;
funcArray[i] = function() { alert(contextCopy); return false; };
i++;
}
funcArray[0]();
funcArray[1]();
}
Spodziewam pierwszy funcArray()
wywołanie powiedzieć 0
a drugi powiedzieć 1
. Jednak obaj mówią: 1
. Jak to możliwe?
Pisząc var contextCopy = i
, upewniam się, że utworzę kopię i
-zmiennej. Następnie w każdej iteracji tworzony jest zupełnie nowy wskaźnik funkcji. Każda funkcja odwołuje się do własnej kopii i
, która jest contextCopy
. Jednak obie utworzone funkcje z jakiegoś powodu odnoszą się do tej samej contextCopy
-zmiennej.
Jak to działa w javascript?
czy istnieje powód, dla którego nie używasz pętli 'for'? – zzzzBov
no there is not ;-) – TwinHabit