Soy un desarrollador de C# y estoy acostumbrado a la forma en que los cierres funcionan en C#. Actualmente tengo para trabajar con funciones javascript anónimos y experimentar un problema con el siguiente fragmento:Acceso a una variable entera copiada en javascript método anónimo
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]();
}
espero que la primera llamada a funcArray()
decir 0
y el segundo para decir 1
. Sin embargo, ambos dicen 1
. ¿Cómo es eso posible?
Escribiendo var contextCopy = i
Me aseguro de crear una copia de la variable i
. Luego, en cada iteración while, creo un puntero de función completamente nuevo. Cada función se refiere a su propia copia de i
, que es contextCopy
. Sin embargo, ambas funciones creadas por alguna razón se refieren a la misma variable contextCopy
.
¿Cómo funciona esto en javascript?
¿Hay alguna razón por la que no esté utilizando un bucle 'for'? – zzzzBov
no, no ;-) – TwinHabit